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

Sockets

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

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

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

connect(path::AbstractString) -> PipeEndpoint

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

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

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

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

listen(path::AbstractString) -> PipeServer

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

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

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

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

Примеры

julia> getaddrinfo("localhost", IPv6)
ip"::1"

julia> getaddrinfo("localhost", IPv4)
ip"127.0.0.1"

getaddrinfo(host::AbstractString) -> IPAddr

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

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.

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.

islinklocaladdr(addr::IPAddr)

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

Примеры

filter(!islinklocaladdr, getipaddrs())
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"
DNSError

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

getnameinfo(host::IPAddr) -> String

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

Примеры

julia> getnameinfo(IPv4("8.8.8.8"))
"google-public-dns-a.google.com"
getsockname(sock::Union{TCPServer, TCPSocket}) -> (IPAddr, UInt16)

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

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

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

IPAddr

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

IPv4(host::Integer) -> IPv4

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

Примеры

julia> IPv4(3223256218)
ip"192.30.252.154"

IPv4(str::AbstractString) -> IPv4

Анализирует строку адреса IPv4, преобразовывая ее в объект IPv4.

Примеры

julia> IPv4("127.0.0.1")
ip"127.0.0.1"
IPv6(host::Integer) -> IPv6

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

Примеры

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

IPv6(str::AbstractString) -> IPv6

Анализирует строку адреса IPv6, преобразовывая ее в объект IPv6.

Примеры

julia> IPv6("::1")
ip"::1"
@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"
TCPSocket(; delay=true)

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

UDPSocket()

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

accept(server[, client])

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

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

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

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, но получать трафик будет только последний привязываемый.


bind(chnl::Channel, task::Task)

Сопоставляет время существования chnl с задачей. Channel chnl автоматически закрывается при завершении работы задачи. Любое необнаруженное исключение в задаче распространяется на все ожидающие объекты для chnl.

Объект chnl можно явным образом закрыть независимо от завершения работы задачи. Завершение работы задач не влияет на уже закрытые объекты Channel.

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

Примеры

julia> c = Channel(0);

julia> task = @async foreach(i->put!(c, i), 1:4);

julia> bind(c,task);

julia> for i in c
           @show i
       end;
i = 1
i = 2
i = 3
i = 4

julia> isopen(c)
false
julia> c = Channel(0);

julia> task = @async (put!(c, 1); error("foo"));

julia> bind(c, task);

julia> take!(c)
1

julia> put!(c, 1);
ERROR: TaskFailedException
Stacktrace:
[...]
    nested task error: foo
[...]
send(socket::UDPSocket, host::IPAddr, port::Integer, msg)

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

recv(socket::UDPSocket)

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

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.

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).

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

Алгоритм Нейгла объединяет несколько небольших TCP-пакетов в более крупные. Это может повысить пропускную способность, но увеличить задержку. Алгоритм Нейгла включен по умолчанию. Эта функция включает или отключает алгоритм Нейгла на заданном TCP-сервере или сокете. Противоположный параметр в других языках называется TCP_NODELAY.

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

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

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

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