Документация Engee

Сокеты

# Sockets.SocketsModule

Поддержка сокетов. Предоставляет IPAddr и подтипы TCPSocket и UDPSocket.

# Sockets.connectMethod

connect([host], port::Integer) -> TCPSocket

Выполняет подключение к хосту host на порте port.

# Sockets.connectMethod

connect(path::AbstractString) -> PipeEndpoint

Выполняет подключение к именованному каналу или сокету домена UNIX по пути path.

Длина пути в Unix ограничена примерно 92 и 108 байтами (см. man unix).

# Sockets.listenMethod

listen([addr, ]port::Integer; backlog::Integer=BACKLOG_DEFAULT) -> TCPServer

Прослушивает порт по адресу, указанному с помощью addr. По умолчанию прослушивается только localhost. Для прослушивания всех интерфейсов следует передать IPv4(0) или IPv6(0) в зависимости от ситуации. backlog определяет, сколько соединений может находиться в режиме ожидания (без вызова accept), прежде чем сервер начнет их отклонять. Для backlog по умолчанию используется 511.

# Sockets.listenMethod

listen(path::AbstractString) -> PipeServer

Создает и прослушивает именованный канал или сокет домена UNIX.

Длина пути в Unix ограничена примерно 92 и 108 байтами (см. man unix).

# Sockets.getaddrinfoFunction

getaddrinfo(host::AbstractString, IPAddr=IPv4) -> IPAddr

Получает первый IP-адрес хоста (host) указанного типа IPAddr. Использует базовую реализацию getaddrinfo операционной системы, которая может выполнять поиск DNS.

# Sockets.getipaddrFunction

getipaddr() -> IPAddr

Получает IP-адрес локального компьютера, отдавая предпочтение IPv4, а не IPv6. Выдает ошибку, если доступные адреса отсутствуют.

getipaddr(addr_type::Type{T}) where T<:IPAddr -> T

Получает IP-адрес локального компьютера указанного типа. Выдает ошибку, если доступные адреса указанного типа отсутствуют.

Эта функция является оболочкой с обратной совместимостью для функции getipaddrs. В новых приложениях вместо нее следует использовать функцию getipaddrs.

Примеры

julia> getipaddr()
ip"192.168.1.28"

julia> getipaddr(IPv6)
ip"fe80::9731:35af:e1c5:6e49"

См. также описание getipaddrs.

# Sockets.getipaddrsFunction

getipaddrs(addr_type::Type{T}=IPAddr; loopback::Bool=false) where T<:IPAddr -> Vector{T}

Получает IP-адрес локального компьютера.

Если необязательному параметру addr_type будет задано значение IPv4 или IPv6, возвращаются адреса только этого типа.

Именованный аргумент loopback определяет, будут ли включены адреса обратной петли (например, ip"127.0.0.1", ip"::1").

Совместимость: Julia 1.2

Эта функция впервые реализована в Julia 1.2.

Примеры

julia> getipaddrs()
5-element Array{IPAddr,1}:
 ip"198.51.100.17"
 ip"203.0.113.2"
 ip"2001:db8:8:4:445e:5fff:fe5d:5500"
 ip"2001:db8:8:4:c164:402e:7e3c:3668"
 ip"fe80::445e:5fff:fe5d:5500"

julia> getipaddrs(IPv6)
3-element Array{IPv6,1}:
 ip"2001:db8:8:4:445e:5fff:fe5d:5500"
 ip"2001:db8:8:4:c164:402e:7e3c:3668"
 ip"fe80::445e:5fff:fe5d:5500"

См. также описание islinklocaladdr.

# Sockets.islinklocaladdrFunction

islinklocaladdr(addr::IPAddr)

Проверяет, является ли IP-адрес локальным адресом канала. Локальные адреса каналов не обязательно являются уникальными за пределами своего сегмента сети, поэтому маршрутизаторы их не пересылают. Локальные адреса каналов находятся в блоках адресов 169.254.0.0/16 или fe80::/10.

Пример

filter(!islinklocaladdr, getipaddrs())

# Sockets.getalladdrinfoFunction

getalladdrinfo(host::AbstractString) -> Vector{IPAddr}

Получает все IP-адреса хоста (host). Использует базовую реализацию getaddrinfo операционной системы, которая может выполнять поиск DNS.

Пример

julia> getalladdrinfo("google.com")
2-element Array{IPAddr,1}:
 ip"172.217.6.174"
 ip"2607:f8b0:4000:804::200e"

# Sockets.DNSErrorType

DNSError

Тип исключения, возникающего при ошибке в поиске DNS. Поле host указывает строку URL-адреса хоста. Поле code указывает код ошибки на основе libuv.

# Sockets.getnameinfoFunction

getnameinfo(host::IPAddr) -> String

Выполняет обратный поиск IP-адреса для возврата имени хоста и службы, используя базовую реализацию getnameinfo операционной системы.

Примеры

julia> getnameinfo(IPv4("8.8.8.8"))
"google-public-dns-a.google.com"

# Sockets.getsocknameFunction

getsockname(sock::Union{TCPServer, TCPSocket}) -> (IPAddr, UInt16)

Получает IP-адрес и порт, к которым привязан данный сокет.

# Sockets.getpeernameFunction

getpeername(sock::TCPSocket) -> (IPAddr, UInt16)

Получает IP-адрес и порт удаленной конечной точки, к которой подключен данный сокет. Действует только для подключенных TCP-сокетов.

# Sockets.IPAddrType

IPAddr

Абстрактный супертип для IP-адресов. Подтипами данного типа являются IPv4 и IPv6.

# Sockets.IPv4Type

IPv4(host::Integer) -> IPv4

Возвращает IPv4-объект из IP-адреса хоста (host), отформатированный как Integer.

Примеры

julia> IPv4(3223256218)
ip"192.30.252.154"

# Sockets.IPv6Type

IPv6(host::Integer) -> IPv6

Возвращает IPv6-объект из IP-адреса хоста (host), отформатированный как Integer.

Примеры

julia> IPv6(3223256218)
ip"::c01e:fc9a"

# Sockets.@ip_strMacro

@ip_str str -> IPAddr

Анализирует str как IP-адрес.

Примеры

julia> ip"127.0.0.1"
ip"127.0.0.1"

julia> @ip_str "2001:db8:0:0:0:0:2:1"
ip"2001:db8::2:1"

# Sockets.TCPSocketType

TCPSocket(; delay=true)

Открывает TCP-сокет с помощью libuv. Если delay имеет значение true, libuv откладывает создание дескриптора файла сокета до первого вызова функции bind. TCPSocket имеет различные поля для обозначения состояния сокета, а также его буферов отправки или приема.

# Sockets.UDPSocketType

UDPSocket()

Открывает UDP-сокет с помощью libuv. UDPSocket имеет различные поля для обозначения состояния сокета.

# Sockets.acceptFunction

accept(server[, client])

Принимает подключение на заданном сервере и возвращает его клиенту. Может быть предоставлен неинициализированный клиентский поток. В этом случае он будет использоваться вместо создания нового потока.

# Sockets.listenanyFunction

listenany([host::IPAddr,] port_hint; backlog::Integer=BACKLOG_DEFAULT) -> (UInt16, TCPServer)

Создает TCPServer на любом порту, используя указание в качестве начальной точки. Возвращает кортеж, состоящий из фактического порта, на котором был создан сервер, и самого сервера. Аргумент backlog определяет максимальную длину, до которой может увеличиваться очередь ожидающих подключений для sockfd.

# Base.bindMethod

bind(socket::Union{TCPServer, UDPSocket, TCPSocket}, host::IPAddr, port::Integer; ipv6only=false, reuseaddr=false, kws...)

Привязывает сокет (socket) к заданному host:port. Обратите внимание, что 0.0.0.0 будет прослушивать все устройства.

  • Параметр ipv6only отключает режим двойного стека. Если ipv6only=true, создается только стек IPv6-адресов.

  • Если reuseaddr=true, несколько потоков или процессов могут привязываться к одному и тому же адресу без ошибки, если для всех их задано reuseaddr=true, но получать трафик будет только последний привязываемый.

# Sockets.sendFunction

send(socket::UDPSocket, host::IPAddr, port::Integer, msg)

Отправляет msg через сокет socket в host:port.

# Sockets.recvFunction

recv(socket::UDPSocket)

Считывает UDP-пакет из указанного сокета и возвращает полученные байты. Этот вызов блокируется.

# Sockets.recvfromFunction

recvfrom(socket::UDPSocket) -> (host_port, data)

Считывает UDP-пакет из указанного сокета, возвращает кортеж из (host_port, data), где host_port — это InetAddr{IPv4} или InetAddr{IPv6} в зависимости от ситуации.

Совместимость: Julia 1.3

До Julia версии 1.3 первым возвращаемым значением был адрес (IPAddr). В версии 1.3 он был изменен на InetAddr.

# Sockets.setoptFunction

setopt(sock::UDPSocket; multicast_loop=nothing, multicast_ttl=nothing, enable_broadcast=nothing, ttl=nothing)

Задает параметры UDP-сокета.

  • multicast_loop: возвратная петля для пакетов мультивещания (значение по умолчанию: true).

  • multicast_ttl: TTL для пакетов мультивещания (значение по умолчанию: nothing).

  • enable_broadcast: для флага должно быть задано значение true, если сокет будет использоваться для трансляции сообщений, иначе UDP-система вернет ошибку доступа (значение по умолчанию: false).

  • ttl: время существования пакетов, отправляемых на сокет (значение по умолчанию: nothing).

# Sockets.nagleFunction

nagle(socket::Union{TCPServer, TCPSocket}, enable::Bool)

Включает или отключает алгоритм Нейгла на заданном TCP-сервере или сокете.

Совместимость: Julia 1.3

Для этой функции требуется версия не ниже Julia 1.3.

# Sockets.quickackFunction

quickack(socket::Union{TCPServer, TCPSocket}, enable::Bool)

В системах Linux TCP_QUICKACK отключен или включен на сокете (socket).