Sockets

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

Подключитесь к хосту host на порту port.

source
Sockets.connectMethod
connect(path::AbstractString) -> PipeEndpoint

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

Note

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

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

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

source
Sockets.listenMethod
listen(path::AbstractString) -> PipeServer

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

Note

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

source
Sockets.getaddrinfoFunction
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"
source
getaddrinfo(host::AbstractString) -> IPAddr

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

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

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

source
Sockets.islinklocaladdrFunction
islinklocaladdr(addr::IPAddr)

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

Примеры

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

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

source
Sockets.getnameinfoFunction
getnameinfo(host::IPAddr) -> String

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

Примеры

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

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

source
Sockets.getpeernameFunction
getpeername(sock::TCPSocket) -> (IPAddr, UInt16)

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

source
Sockets.IPAddrType
IPAddr

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

source
Sockets.IPv4Type
IPv4(host::Integer) -> IPv4

Вернуть объект IPv4 из IP-адреса host, отформатированного как Integer.

Примеры

julia> IPv4(3223256218)
ip"192.30.252.154"
source
IPv4(str::AbstractString) -> IPv4

Парсит строку адреса IPv4 в объект IPv4.

Примеры

julia> IPv4("127.0.0.1")
ip"127.0.0.1"
source
Sockets.IPv6Type
IPv6(host::Integer) -> IPv6

Вернуть объект IPv6 из IP-адреса host, отформатированного как Integer.

Примеры

julia> IPv6(3223256218)
ip"::c01e:fc9a"
source
IPv6(str::AbstractString) -> IPv6

Парсит строку адреса IPv6 в объект IPv6.

Примеры

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

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

source
Sockets.UDPSocketType
UDPSocket()

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

source
Sockets.acceptFunction
accept(server[, client])

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

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

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

source
Base.bindFunction
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, но только последний, кто привяжется, будет получать трафик.
source
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
[...]
source
Sockets.sendFunction
send(socket::UDPSocket, host::IPAddr, port::Integer, msg)

Отправить msg через socket на host:port.

source
Sockets.recvFunction
recv(socket::UDPSocket)

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

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

source
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).
source
Sockets.nagleFunction
nagle(socket::Union{TCPServer, TCPSocket}, enable::Bool)

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

Julia 1.3

Эта функция требует Julia 1.3 или более поздней версии.

source
Sockets.quickackFunction
quickack(socket::Union{TCPServer, TCPSocket}, enable::Bool)

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

source