Spec-Zone.ru › Nim 1

nativesockets

Этот модуль реализует кроссплатформенный интерфейс сокетов низкого уровня. Обратитесь к модулю net для версии более высокого уровня.

Импорты

os, options, since, winlean

Типы

Port = distinct uint16
тип порта Исходный код Редактировать
Domain = enum
  AF_UNSPEC = 0, ## unspecified domain (can be detected automatically by
                  ## some procedures, such as getaddrinfo)
  AF_UNIX = 1,              ## for local socket (using a file). Unsupported on Windows.
  AF_INET = 2,              ## for network protocol IPv4 or
  AF_INET6 = 23
домен, который определяет семейство протоколов созданного сокета. Другие домены, кроме перечисленных здесь, не поддерживаются. Исходный код Редактировать
SockType = enum
  SOCK_STREAM = 1,          ## reliable stream-oriented service or Stream Sockets
  SOCK_DGRAM = 2,           ## datagram service or Datagram Sockets
  SOCK_RAW = 3,             ## raw protocols atop the network layer.
  SOCK_SEQPACKET = 5         ## reliable sequenced packet service
второй аргумент для процедуры socket Исходный код Редактировать
Protocol = enum
  IPPROTO_TCP = 6,          ## Transmission control protocol.
  IPPROTO_UDP = 17,         ## User datagram protocol.
  IPPROTO_IP,               ## Internet protocol.
  IPPROTO_IPV6,             ## Internet Protocol Version 6.
  IPPROTO_RAW,              ## Raw IP Packets Protocol. Unsupported on Windows.
  IPPROTO_ICMP,             ## Internet Control message protocol.
  IPPROTO_ICMPV6             ## Internet Control message protocol for IPv6.
третий аргумент для процедуры socket Исходный код Редактировать
Servent = object
  name*: string
  aliases*: seq[string]
  port*: Port
  proto*: string
информация о службе Исходный код Редактировать
Hostent = object
  name*: string
  aliases*: seq[string]
  addrtype*: Domain
  length*: int
  addrList*: seq[string]
информация о заданном хосте Исходный код Редактировать

Пути

osInvalidSocket = INVALID_SOCKET
Исходный код Редактировать

Константы

IOCPARM_MASK = 127
Исходный код Редактировать
IOC_IN = -2147483648
Исходный код Редактировать
FIONBIO = -2147195266'i32
Исходный код Редактировать

Процедуры

proc ioctlsocket(s: SocketHandle; cmd: clong; argptr: ptr clong): cint {...}{.
    stdcall, importc: "ioctlsocket", dynlib: "ws2_32.dll".}
Исходный код Редактировать
proc `==`(a, b: Port): bool {...}{.borrow.}
для портов. Исходный код Редактировать
proc `$`(p: Port): string {...}{.borrow.}
Возвращает номер порта в виде строки Исходный код Редактировать
proc toInt(domain: Domain): cint {...}{.raises: [], tags: [].}
Преобразует перечисление Domain в зависящую от платформы cint. Исходный код Редактировать
proc toKnownDomain(family: cint): Option[Domain] {...}{.raises: [], tags: [].}
Преобразует зависящую от платформы cint в перечисление Domain или none(), если cint неизвестна. Исходный код Редактировать
proc toInt(typ: SockType): cint {...}{.raises: [], tags: [].}
Преобразует перечисление SockType в зависящую от платформы cint. Исходный код Редактировать
proc toInt(p: Protocol): cint {...}{.raises: [], tags: [].}
Преобразует перечисление Protocol в зависящую от платформы cint. Исходный код Редактировать
proc toSockType(protocol: Protocol): SockType {...}{.raises: [], tags: [].}
Исходный код Редактировать
proc getProtoByName(name: string): int {...}{.raises: [OSError], tags: [].}
Возвращает код протокола из базы данных, соответствующий протоколу name. Исходный код Редактировать
proc close(socket: SocketHandle) {...}{.raises: [], tags: [].}
Закрывает сокет. Исходный код Редактировать
proc setInheritable(s: SocketHandle; inheritable: bool): bool {...}{.inline,
    raises: [], tags: [].}

Устанавливает, может ли сокет наследовать дочерними процессами. Возвращает true при успехе.

Эта функция не реализована на всех платформах, проверьте доступность с помощью declared() <system.html#declared,untyped>.

Исходный код Редактировать
proc createNativeSocket(domain: cint; sockType: cint; protocol: cint;
                        inheritable: bool = defined(nimInheritHandles)): SocketHandle {...}{.
    raises: [], tags: [].}

Создает новый сокет; возвращает osInvalidSocket при ошибке.

inheritable определяет, может ли полученный SocketHandle унаследоваться дочерними процессами.

Используйте этот перегруз, если одно из перечислений выше не содержит необходимой информации.

Исходный код Редактировать
proc createNativeSocket(domain: Domain = AF_INET;
                        sockType: SockType = SOCK_STREAM;
                        protocol: Protocol = IPPROTO_TCP;
                        inheritable: bool = defined(nimInheritHandles)): SocketHandle {...}{.
    raises: [], tags: [].}

Создает новый сокет; возвращает osInvalidSocket при ошибке.

inheritable определяет, может ли полученный SocketHandle унаследоваться дочерними процессами.

Исходный код Редактировать
proc bindAddr(socket: SocketHandle; name: ptr SockAddr; namelen: SockLen): cint {...}{.
    raises: [], tags: [].}
Исходный код Редактировать
proc listen(socket: SocketHandle; backlog = SOMAXCONN): cint {...}{.
    tags: [ReadIOEffect], raises: [].}
Помечает socket как принимающий подключения. Backlog задает максимальную длину очереди ожидающих подключений. Исходный код Редактировать
proc getAddrInfo(address: string; port: Port; domain: Domain = AF_INET;
                 sockType: SockType = SOCK_STREAM;
                 protocol: Protocol = IPPROTO_TCP): ptr AddrInfo {...}{.
    raises: [OSError], tags: [].}

Предупреждение: Полученный ptr AddrInfo должен быть освобожден с помощью freeAddrInfo!

Исходный код Редактировать
proc ntohl(x: uint32): uint32 {...}{.raises: [], tags: [].}
Преобразует 32-битные беззнаковые целые числа из сетевого порядка байтов в порядок байтов хоста. На машинах, где порядок байтов хоста совпадает с сетевым порядком, это бесполезная операция; в противном случае выполняется операция перестановки 4 байт. Исходный код Редактировать
proc ntohs(x: uint16): uint16 {...}{.raises: [], tags: [].}
Преобразует 16-битные беззнаковые целые числа из сетевого порядка байтов в порядок байтов хоста. На машинах, где порядок байтов хоста совпадает с сетевым порядком, это бесполезная операция; в противном случае выполняется операция перестановки 2 байт. Исходный код Редактировать
proc getServByName(name, proto: string): Servent {...}{.tags: [ReadIOEffect],
    raises: [OSError].}

Ищет в базе данных с начала и находит первую запись, для которой имя службы, указанное name, совпадает с членом s_name, а имя протокола, указанное proto, совпадает с членом s_proto.

В POSIX это будет поиск в файле /etc/services.

Исходный код Редактировать
proc getServByPort(port: Port; proto: string): Servent {...}{.tags: [ReadIOEffect],
    raises: [OSError].}

Ищет в базе данных с начала и находит первую запись, для которой порт, указанный port, совпадает с членом s_port, а имя протокола, указанное proto, совпадает с членом s_proto.

В POSIX это будет поиск в файле /etc/services.

Исходный код Редактировать
proc getHostByAddr(ip: string): Hostent {...}{.tags: [ReadIOEffect],
    raises: [OSError].}
Эта функция ищет имя хоста по IP-адресу. Исходный код Редактировать
proc getHostByName(name: string): Hostent {...}{.tags: [ReadIOEffect],
    raises: [OSError].}
Эта функция ищет IP-адрес по имени хоста. Исходный код Редактировать
proc getHostname(): string {...}{.tags: [ReadIOEffect], raises: [OSError].}
Возвращает локальное имя хоста (не FQDN) Исходный код Редактировать
proc getSockDomain(socket: SocketHandle): Domain {...}{.raises: [OSError, IOError],
    tags: [].}
Возвращает домен сокета (AF_INET или AF_INET6). Исходный код Редактировать
proc getAddrString(sockAddr: ptr SockAddr): string {...}{.
    raises: [Exception, OSError, IOError], tags: [].}
Возвращает строковое представление адреса в пределах sockAddr Исходный код Редактировать
proc getAddrString(sockAddr: ptr SockAddr; strAddress: var string) {...}{.
    raises: [Exception, OSError, IOError], tags: [].}

Хранит в strAddress строковое представление адреса внутри sockAddr

Примечание

  • strAddress должен быть инициализирован длиной 46.
Исходный код Редактировать
proc getSockName(socket: SocketHandle): Port {...}{.raises: [OSError], tags: [].}
Возвращает связанный номер порта сокета. Исходный код Редактировать
proc getLocalAddr(socket: SocketHandle; domain: Domain): (string, Port) {...}{.
    raises: [OSError, Exception], tags: [].}

Возвращает локальный адрес и номер порта сокета.

Аналогично POSIX's getsockname.

Исходный код Редактировать
proc getPeerAddr(socket: SocketHandle; domain: Domain): (string, Port) {...}{.
    raises: [OSError, Exception], tags: [].}

Возвращает адрес и номер порта сокета удаленного узла.

Аналогично POSIX's getpeername

Исходный код Редактировать
proc getSockOptInt(socket: SocketHandle; level, optname: int): int {...}{.
    tags: [ReadIOEffect], raises: [OSError].}
getsockopt для целочисленных опций. Исходный код Редактировать
proc setSockOptInt(socket: SocketHandle; level, optname, optval: int) {...}{.
    tags: [WriteIOEffect], raises: [OSError].}
setsockopt для целочисленных опций. Исходный код Редактировать
END_OF_DOCUMENT_MARKER
proc setBlocking(s: SocketHandle; blocking: bool) {...}{.raises: [OSError], tags: [].}

Устанавливает режим блокировки для сокета.

При ошибке генерирует исключение OSError.

Исходный код Редактировать
proc selectRead(readfds: var seq[SocketHandle]; timeout = 500): int {...}{.
    raises: [], tags: [].}

Когда сокет в readfds готов к чтению, возвращается ненулевое значение, указывающее количество сокетов, которые можно читать. Сокеты, которые нельзя прочитать, также будут удалены из readfds.

timeout задаётся в миллисекундах, а -1 может быть задано для неограниченного времени.

Исходный код Редактировать
proc selectWrite(writefds: var seq[SocketHandle]; timeout = 500): int {...}{.
    tags: [ReadIOEffect], raises: [].}

Принимает новое подключение клиента.

writefds определяет, может ли полученный SocketHandle унаследоваться дочерними процессами.

Возвращает (osInvalidSocket, "") при возникновении ошибки.

Исходный код Редактировать

Шаблоны

template htonl(x: uint32): untyped
Преобразует 32-битные беззнаковые целые числа из порядка байтов процессора в сетевой порядок байтов. На машинах, где порядок байтов процессора совпадает с сетевым порядком, это нетранзакционная операция; в противном случае выполняется операция перестановки 4 байтов. Исходный код Редактировать
template htons(x: uint16): untyped
Преобразует 16-битные беззнаковые целые числа из порядка байтов процессора в сетевой порядок байтов. На машинах, где порядок байтов процессора совпадает с сетевым порядком, это нетранзакционная операция; в противном случае выполняется операция перестановки 2 байтов. Исходный код Редактировать

Экспорт

WSAEWOULDBLOCK, WSAECONNRESET, WSAECONNABORTED, WSAENETRESET, WSANOTINITIALISED, WSAENOTSOCK, WSAEINPROGRESS, WSAEINTR, WSAEDISCON, ERROR_NETNAME_DELETED, SocketHandle, Sockaddr_in, AddrInfo, INADDR_ANY, SockAddr, SockLen, Sockaddr_in6, Sockaddr_storage, inet_ntoa, recv, ==, ==, ==, ==, ==, ==, ==, ==, ==, ==, ==, ==, ==, ==, ==, ==, ==, ==, ==, ==, ==, ==, ==, ==, ==, ==, ==, ==, ==, connect, send, accept, recvfrom, sendto, freeaddrinfo, SO_ERROR, SOL_SOCKET, SOMAXCONN, SO_ACCEPTCONN, SO_BROADCAST, SO_DEBUG, SO_DONTROUTE, SO_KEEPALIVE, SO_OOBINLINE, SO_REUSEADDR, SO_REUSEPORT, MSG_PEEK

© 2006–2021 Andreas Rumpf
Licensed under the MIT License.
https://nim-lang.org/docs/nativesockets.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API