Сокеты
Sockets.SocketsМодуль
Поддержка сокетов. Предоставляет IPAddr и подтипы, TCPSocket, и UDPSocket.
Sockets.connectМетод
connect([host], port::Integer) -> TCPSocket
Подключиться к хосту host на порту port.
Sockets.connectМетод
connect(path::AbstractString) -> PipeEndpoint
Подключиться к именованной трубе/сокету доменной области Unix по адресу path.
Длина пути в Unix ограничена примерно от 92 до 108 байтов (см. man unix).
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.
Длина пути в Unix ограничена примерно от 92 до 108 байтов (см. man 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(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; backlog::Integer=BACKLOG_DEFAULT) -> (UInt16, TCPServer)
Создаёт TCPServer на любом порте, используя подсказку в качестве начальной точки. Возвращает кортеж из фактического порта, на котором был создан сервер, и сам сервер. Аргумент backlog определяет максимальную длину очереди ожидающих подключений для sockfd.
Base.bindФункция
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
[...]
исходный код
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–2023 Jeff Bezanson, Stefan Karpinski, Viral B. Shah, and other contributors
Licensed under the MIT License.
https://docs.julialang.org/en/v1.9/stdlib/Sockets/