Сокеты
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Функция
getalladdrinfo(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-адрес локальной машины указанного типа. Выбрасывает исключение, если адреса указанного типа недоступны.
Примеры
julia> getipaddr() ip"192.168.1.28" julia> getipaddr(IPv6) ip"fe80::9731:35af:e1c5:6e49"исходный код
Sockets.getipaddrsФункция
getipaddrs(; loopback::Bool=false) -> Vector{IPAddr}
Получить IPv4-адреса локальной машины.
getipaddrs(addr_type::Type{T}; loopback::Bool=false) where T<:IPAddr -> Vector{T}
Получить IP-адреса локальной машины указанного типа.
Параметр loopback определяет, включать ли адреса обратной связи.
Эта функция доступна начиная с Julia 1.2.
Примеры
julia> getipaddrs()
2-element Array{IPv4,1}:
ip"10.255.0.183"
ip"172.17.0.1"
julia> getipaddrs(IPv6)
2-element Array{IPv6,1}:
ip"fe80::9731:35af:e1c5:6e49"
ip"fe80::445e:5fff:fe5d:5500"
исходный код
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.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 истинно, libuv откладывает создание дескриптора файла сокета до первого вызова bind. TCPSocket имеет различные поля для обозначения состояния сокета, а также его буферов отправки/приёма.
Sockets.UDPSocketТип
UDPSocket()
Открытие UDP-сокета с использованием libuv. UDPSocket имеет различные поля для обозначения состояния сокета.
Sockets.acceptФункция
accept(server[,client])
Принимает подключение на данном сервере и возвращает подключение к клиенту. Может быть передан неинициализированный клиентский поток, в этом случае он будет использован вместо создания нового потока.
исходный код
Sockets.listenanyФункция
listenany([host::IPAddr,] port_hint) -> (UInt16, TCPServer)
Создать 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: foo
Stacktrace:
[...]
исходный кодbind(socket::Union{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, port::Integer, msg)
Отправить msg по socket на host:port.
Sockets.recvФункция
recv(socket::UDPSocket)
Прочитать пакет UDP из указанного сокета и вернуть полученные байты. Этот вызов блокирующий.
source
Sockets.recvfromФункция
recvfrom(socket::UDPSocket) -> (address, data)
Прочитать пакет UDP из указанного сокета, возвращая кортеж (address, data), где address будет либо IPv4, либо IPv6, соответственно.
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).
© 2009–2019 Jeff Bezanson, Stefan Karpinski, Viral B. Shah, and other contributors
Licensed under the MIT License.
https://docs.julialang.org/en/v1.2.0/stdlib/Sockets/