Сокеты
Sockets.SocketsМодуль
Поддержка сокетов. Предоставляет IPAddr и подтипы, TCPSocket, и UDPSocket.
Sockets.connectМетод
connect([host], port::Integer) -> TCPSocket
Подключение к хосту host на порту port.
Sockets.connectМетод
connect(path::AbstractString) -> PipeEndpoint
Подключение к именованной трубе/сокету доменной области UNIX по адресу path.
Sockets.listenМетод
listen([addr, ]port::Integer; backlog::Integer=BACKLOG_DEFAULT) -> TCPServer
Прослушивание порта по адресу, указанному в addr. По умолчанию прослушивание только на localhost. Чтобы прослушивать на всех интерфейсах, используйте IPv4(0) или IPv6(0) соответственно. backlog определяет, сколько подключений могут быть ожидающими (до вызова accept), прежде чем сервер начнёт их отклонять. Значение по умолчанию для backlog равно 511.
Sockets.listenМетод
listen(path::AbstractString) -> PipeServer
Создание и прослушивание именованной трубы/сокета доменной области UNIX.
исходный код
Sockets.getaddrinfoФункция
getaddrinfo(host::AbstractString, IPAddr=IPv4) -> IPAddr
Получает первый IP-адрес host указанного IPAddr типа. Использует реализацию getaddrinfo операционной системы, которая может выполнять поиск DNS.
Sockets.getipaddrФункция
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.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> 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, split(ENV["SSH_CONNECTION"], ' ')[3]
Sockets.islinklocaladdrФункция
islinklocaladdr(addr::IPAddr)
Проверяет, является ли IP-адрес адресом локальной сети. Адреса локальной сети не гарантируют уникальность за пределами сегмента сети, поэтому маршрутизаторы их не передают. Адреса локальной сети взяты из блоков адресов 169.254.0.0/16 или fe80::/10.
Пример
filter(!islinklocaladdr, getipaddrs())исходный код
Sockets.getalladdrinfoФункция
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.DNSErrorТип
DNSError
Тип исключения, выбрасываемого при возникновении ошибки в поиске DNS. Поле host указывает строку URL хоста. Поле code указывает код ошибки, основанный на libuv.
Sockets.getnameinfoФункция
getnameinfo(host::IPAddr) -> String
Выполняет обратный поиск IP-адреса для получения имени хоста и службы с использованием реализации getnameinfo операционной системы.
Примеры
julia> getnameinfo(Sockets.IPv4("8.8.8.8"))
"google-public-dns-a.google.com"
исходный код
Sockets.getsocknameФункция
getsockname(sock::Union{TCPServer, TCPSocket}) -> (IPAddr, UInt16)
Получение IP-адреса и порта, к которому привязан данный сокет.
исходный код
Sockets.getpeernameФункция
getpeername(sock::TCPSocket) -> (IPAddr, UInt16)
Получение IP-адреса и порта удалённого узла, к которому подключён данный сокет. Действительно только для подключённых TCP-сокетов.
исходный код
Sockets.IPAddrТип
IPAddr
Абстрактный супертип для IP-адресов. IPv4 и IPv6 являются подтипами этого.
Sockets.IPv4Тип
IPv4(host::Integer) -> IPv4
Возвращает объект IPv4 из IP-адреса host в формате Integer.
Примеры
julia> IPv4(3223256218) ip"192.30.252.154"исходный код
Sockets.IPv6Тип
IPv6(host::Integer) -> IPv6
Возвращает объект IPv6 из IP-адреса host в формате Integer.
Примеры
julia> IPv6(3223256218) ip"::c01e:fc9a"исходный код
Sockets.@ip_strМакрос
@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.TCPSocketТип
TCPSocket(; delay=true)
Открытие TCP-сокета с использованием libuv. Если delay равно true, libuv откладывает создание дескриптора файла сокета до первого вызова bind. TCPSocket имеет различные поля для обозначения состояния сокета, а также буферов отправки/приёма.
Sockets.UDPSocketТип
UDPSocket()
Открытие UDP-сокета с использованием libuv. UDPSocket имеет различные поля для обозначения состояния сокета.
Sockets.acceptФункция
accept(server[, client])
Принимает соединение на заданном сервере и возвращает соединение с клиентом. Может быть предоставлен неинициализированный клиентский поток, в таком случае он будет использован вместо создания нового.
исходный код
Sockets.listenanyФункция
listenany([host::IPAddr,] port_hint) -> (UInt16, TCPServer)
Создает сокет на любом порту, используя указанный порт в качестве начальной точки. Возвращает кортеж из фактического порта, на котором был создан сервер, и самого сервера.
исходный код
Base.bindФункция
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
[...]
исходный код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.sendФункция
send(socket::UDPSocket, host::IPAddr, port::Integer, msg)
Отправляет msg по socket в host:port.
Sockets.recvФункция
recv(socket::UDPSocket)
Считывает пакет UDP из указанного сокета и возвращает полученные байты. Этот вызов блокирует.
исходный код
Sockets.recvfromФункция
recvfrom(socket::UDPSocket) -> (host_port, data)
Считывает пакет UDP из указанного сокета, возвращая кортеж из (host_port, data), где host_port будет InetAddr{IPv4} или InetAddr{IPv6}, в зависимости от случая.
До версии Julia 1.3 первым возвращаемым значением был адрес (IPAddr). В версии 1.3 он был изменен на InetAddr.
Sockets.setoptФункция
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.nagleФункция
nagle(socket::Union{TCPServer, TCPSocket}, enable::Bool)
Включает или отключает алгоритм Нагле на заданном TCP-сервере или сокете.
Эта функция требует Julia 1.3 или более поздней версии.
Sockets.quickackФункция
quickack(socket::Union{TCPServer, TCPSocket}, enable::Bool)
На системах Linux функция TCP_QUICKACK отключается или включается для socket.
© 2009–2021 Jeff Bezanson, Stefan Karpinski, Viral B. Shah, and other contributors
Licensed under the MIT License.
https://docs.julialang.org/en/v1.6.0/stdlib/Sockets/