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
).