Сокеты
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.
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)
Создаёт TCPServer на любом порту, используя hint в качестве отправной точки. Возвращает кортеж из фактического порта, на котором был создан сервер, и самого сервера.
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: обратная связь для пакетов multicast (по умолчанию:true). -
multicast_ttl: TTL для пакетов multicast (по умолчанию:nothing). -
enable_broadcast: флаг должен быть установлен наtrueесли сокет будет использоваться для broadcast сообщений, иначе 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.7.0/stdlib/Sockets/