Sockets
#
Sockets.connect — Method
connect([host], port::Integer) -> TCPSocket
Выполняет подключение к хосту host на порте port.
#
Sockets.connect — Method
connect(path::AbstractString) -> PipeEndpoint
Выполняет подключение к именованному каналу или сокету домена UNIX по пути path.
|
Длина пути в Unix ограничена примерно 92 и 108 байтами (см. |
#
Sockets.listen — Method
listen([addr, ]port::Integer; backlog::Integer=BACKLOG_DEFAULT) -> TCPServer
Прослушивает порт по адресу, указанному с помощью addr. По умолчанию прослушивается только localhost. Для прослушивания всех интерфейсов следует передать IPv4(0) или IPv6(0) в зависимости от ситуации. backlog определяет, сколько соединений может находиться в режиме ожидания (без вызова accept), прежде чем сервер начнет их отклонять. Для backlog по умолчанию используется 511.
#
Sockets.listen — Method
listen(path::AbstractString) -> PipeServer
Создает и прослушивает именованный канал или сокет домена UNIX.
|
Длина пути в Unix ограничена примерно 92 и 108 байтами (см. |
#
Sockets.getaddrinfo — Function
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"
getaddrinfo(host::AbstractString) -> IPAddr
Получает первый доступный IP-адрес хоста (host), который может быть адресом IPv4 или IPv6. Использует базовую реализацию getaddrinfo операционной системы, которая может выполнять поиск DNS.
#
Sockets.getipaddr — Function
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 — Function
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.
#
Sockets.islinklocaladdr — Function
islinklocaladdr(addr::IPAddr)
Проверяет, является ли IP-адрес локальным адресом канала. Локальные адреса каналов не обязательно являются уникальными за пределами своего сегмента сети, поэтому маршрутизаторы их не пересылают. Локальные адреса каналов находятся в блоках адресов 169.254.0.0/16 или fe80::/10.
Примеры
filter(!islinklocaladdr, getipaddrs())
#
Sockets.getalladdrinfo — Function
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 — Type
DNSError
Тип исключения, возникающего при ошибке в поиске DNS. Поле host указывает строку URL-адреса хоста. Поле code указывает код ошибки на основе libuv.
#
Sockets.getnameinfo — Function
getnameinfo(host::IPAddr) -> String
Выполняет обратный поиск IP-адреса для возврата имени хоста и службы, используя базовую реализацию getnameinfo операционной системы.
Примеры
julia> getnameinfo(IPv4("8.8.8.8"))
"google-public-dns-a.google.com"
#
Sockets.getsockname — Function
getsockname(sock::Union{TCPServer, TCPSocket}) -> (IPAddr, UInt16)
Получает IP-адрес и порт, к которым привязан данный сокет.
#
Sockets.getpeername — Function
getpeername(sock::TCPSocket) -> (IPAddr, UInt16)
Получает IP-адрес и порт удаленной конечной точки, к которой подключен данный сокет. Действует только для подключенных TCP-сокетов.
#
Sockets.IPv4 — Type
IPv4(host::Integer) -> IPv4
Возвращает IPv4-объект из IP-адреса хоста (host), отформатированный как Integer.
Примеры
julia> IPv4(3223256218)
ip"192.30.252.154"
IPv4(str::AbstractString) -> IPv4
Анализирует строку адреса IPv4, преобразовывая ее в объект IPv4.
Примеры
julia> IPv4("127.0.0.1")
ip"127.0.0.1"
#
Sockets.IPv6 — Type
IPv6(host::Integer) -> IPv6
Возвращает IPv6-объект из IP-адреса хоста (host), отформатированный как Integer.
Примеры
julia> IPv6(3223256218)
ip"::c01e:fc9a"
IPv6(str::AbstractString) -> IPv6
Анализирует строку адреса IPv6, преобразовывая ее в объект IPv6.
Примеры
julia> IPv6("::1")
ip"::1"
#
Sockets.@ip_str — Macro
@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 — Type
TCPSocket(; delay=true)
Открывает TCP-сокет с помощью libuv. Если delay имеет значение true, libuv откладывает создание дескриптора файла сокета до первого вызова функции bind. TCPSocket имеет различные поля для обозначения состояния сокета, а также его буферов отправки или приема.
#
Sockets.UDPSocket — Type
UDPSocket()
Открывает UDP-сокет с помощью libuv. UDPSocket имеет различные поля для обозначения состояния сокета.
#
Sockets.accept — Function
accept(server[, client])
Принимает подключение на заданном сервере и возвращает его клиенту. Может быть предоставлен неинициализированный клиентский поток. В этом случае он будет использоваться вместо создания нового потока.
#
Sockets.listenany — Function
listenany([host::IPAddr,] port_hint; backlog::Integer=BACKLOG_DEFAULT) -> (UInt16, TCPServer)
Создает TCPServer на любом порту, используя указание в качестве начальной точки. Возвращает кортеж, состоящий из фактического порта, на котором был создан сервер, и самого сервера. Аргумент backlog определяет максимальную длину, до которой может увеличиваться очередь ожидающих подключений для sockfd.
#
Base.bind — Function
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 — Function
send(socket::UDPSocket, host::IPAddr, port::Integer, msg)
Отправляет msg через сокет socket в host:port.
#
Sockets.recv — Function
recv(socket::UDPSocket)
Считывает UDP-пакет из указанного сокета и возвращает полученные байты. Этот вызов блокируется.
#
Sockets.recvfrom — Function
recvfrom(socket::UDPSocket) -> (host_port, data)
Считывает UDP-пакет из указанного сокета, возвращает кортеж из (host_port, data), где host_port — это InetAddr{IPv4} или InetAddr{IPv6} в зависимости от ситуации.
|
Совместимость: Julia 1.3
До версии Julia 1.3 первым возвращаемым значением был адрес ( |
#
Sockets.setopt — Function
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 — Function
nagle(socket::Union{TCPServer, TCPSocket}, enable::Bool)
Алгоритм Нейгла объединяет несколько небольших TCP-пакетов в более крупные. Это может повысить пропускную способность, но увеличить задержку. Алгоритм Нейгла включен по умолчанию. Эта функция включает или отключает алгоритм Нейгла на заданном TCP-сервере или сокете. Противоположный параметр в других языках называется TCP_NODELAY.
|
Совместимость: Julia 1.3
Для этой функции требуется версия Julia не ниже 1.3. |
#
Sockets.quickack — Function
quickack(socket::Union{TCPServer, TCPSocket}, enable::Bool)
В системах Linux TCP_QUICKACK отключен или включен на сокете (socket).