Sockets
Sockets.Sockets
— ModuleSockets.connect
— Methodconnect([host], port::Integer) -> TCPSocket
호스트 host
에 포트 port
로 연결합니다.
Sockets.connect
— Methodconnect(path::AbstractString) -> PipeEndpoint
지정된 경로의 이름 있는 파이프 / UNIX 도메인 소켓에 연결합니다.
Unix에서 경로 길이는 92바이트에서 108바이트 사이로 제한됩니다 (cf. man unix
).
Sockets.listen
— Methodlisten([addr, ]port::Integer; backlog::Integer=BACKLOG_DEFAULT) -> TCPServer
지정된 addr
주소의 포트에서 수신합니다. 기본적으로 이는 localhost
에서만 수신합니다. 모든 인터페이스에서 수신하려면 적절하게 IPv4(0)
또는 IPv6(0)
를 전달하십시오. backlog
는 서버가 연결을 거부하기 시작하기 전에 대기할 수 있는 연결 수( accept
를 호출하지 않은 상태)를 결정합니다. backlog
의 기본값은 511입니다.
Sockets.listen
— Methodlisten(path::AbstractString) -> PipeServer
이름이 있는 파이프 / UNIX 도메인 소켓을 생성하고 수신합니다.
Unix에서 경로 길이는 92바이트에서 108바이트 사이로 제한됩니다 (cf. man unix
).
Sockets.getaddrinfo
— Functiongetaddrinfo(host::AbstractString, IPAddr) -> IPAddr
지정된 IPAddr
유형의 host
의 첫 번째 IP 주소를 가져옵니다. 운영 체제의 기본 getaddrinfo 구현을 사용하며, 이는 DNS 조회를 수행할 수 있습니다.
예제
julia> getaddrinfo("localhost", IPv6)
ip"::1"
julia> getaddrinfo("localhost", IPv4)
ip"127.0.0.1"
getaddrinfo(host::AbstractString) -> IPAddr
host
의 첫 번째 사용 가능한 IP 주소를 가져옵니다. 이 주소는 IPv4
또는 IPv6
주소일 수 있습니다. 운영 체제의 기본 getaddrinfo 구현을 사용하며, 이 구현은 DNS 조회를 수행할 수 있습니다.
Sockets.getipaddr
— Functiongetipaddr() -> 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
— Functiongetipaddrs(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
— Functionislinklocaladdr(addr::IPAddr)
IP 주소가 링크 로컬 주소인지 테스트합니다. 링크 로컬 주소는 네트워크 세그먼트를 넘어서는 고유성이 보장되지 않으므로 라우터가 이를 전달하지 않습니다. 링크 로컬 주소는 주소 블록 169.254.0.0/16
또는 fe80::/10
에서 나옵니다.
예제
filter(!islinklocaladdr, getipaddrs())
Sockets.getalladdrinfo
— Functiongetalladdrinfo(host::AbstractString) -> Vector{IPAddr}
host
의 모든 IP 주소를 가져옵니다. 운영 체제의 기본 getaddrinfo
구현을 사용하며, 이는 DNS 조회를 수행할 수 있습니다.
예제
julia> getalladdrinfo("google.com")
2-element Array{IPAddr,1}:
ip"172.217.6.174"
ip"2607:f8b0:4000:804::200e"
Sockets.DNSError
— TypeDNSError
DNS 조회 중 오류가 발생할 때 발생하는 예외의 유형입니다. host
필드는 호스트 URL 문자열을 나타냅니다. code
필드는 libuv를 기반으로 한 오류 코드를 나타냅니다.
Sockets.getnameinfo
— Functiongetnameinfo(host::IPAddr) -> String
IP 주소에 대한 역 조회를 수행하여 운영 체제의 기본 getnameinfo
구현을 사용하여 호스트 이름과 서비스를 반환합니다.
예제
julia> getnameinfo(IPv4("8.8.8.8"))
"google-public-dns-a.google.com"
Sockets.getsockname
— Functiongetsockname(sock::Union{TCPServer, TCPSocket}) -> (IPAddr, UInt16)
주어진 소켓이 바인딩된 IP 주소와 포트를 가져옵니다.
Sockets.getpeername
— Functiongetpeername(sock::TCPSocket) -> (IPAddr, UInt16)
주어진 소켓이 연결된 원격 엔드포인트의 IP 주소와 포트를 가져옵니다. 연결된 TCP 소켓에 대해서만 유효합니다.
Sockets.IPAddr
— TypeSockets.IPv4
— TypeIPv4(host::Integer) -> IPv4
IP 주소 host
에서 Integer
형식으로 IPv4 객체를 반환합니다.
예제
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
— TypeIPv6(host::Integer) -> IPv6
IP 주소 host
를 Integer
형식으로 변환하여 IPv6 객체를 반환합니다.
예제
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
— TypeTCPSocket(; delay=true)
libuv를 사용하여 TCP 소켓을 엽니다. delay
가 true인 경우, libuv는 첫 번째 bind
호출까지 소켓의 파일 디스크립터 생성을 지연시킵니다. TCPSocket
은 소켓의 상태와 전송/수신 버퍼를 나타내는 다양한 필드를 가지고 있습니다.
Sockets.UDPSocket
— TypeUDPSocket()
libuv를 사용하여 UDP 소켓을 엽니다. UDPSocket
은 소켓의 상태를 나타내는 다양한 필드를 가지고 있습니다.
Sockets.accept
— Functionaccept(server[, client])
주어진 서버에서 연결을 수락하고 클라이언트에 대한 연결을 반환합니다. 초기화되지 않은 클라이언트 스트림이 제공될 수 있으며, 이 경우 새 스트림을 생성하는 대신 해당 스트림이 사용됩니다.
Sockets.listenany
— Functionlistenany([host::IPAddr,] port_hint; backlog::Integer=BACKLOG_DEFAULT) -> (UInt16, TCPServer)
임의의 포트에서 TCPServer
를 생성하며, 힌트를 시작점으로 사용합니다. 서버가 생성된 실제 포트와 서버 자체의 튜플을 반환합니다. backlog 인자는 sockfd에 대한 대기 중인 연결의 최대 길이를 정의합니다.
Base.bind
— Functionbind(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
은 작업이 종료될 때 자동으로 닫힙니다. 작업에서 발생한 모든 uncaught 예외는 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
— Functionsend(socket::UDPSocket, host::IPAddr, port::Integer, msg)
sock
을 통해 host:port
로 msg
를 전송합니다.
Sockets.recv
— Functionrecv(socket::UDPSocket)
지정된 소켓에서 UDP 패킷을 읽고 수신된 바이트를 반환합니다. 이 호출은 차단됩니다.
Sockets.recvfrom
— Functionrecvfrom(socket::UDPSocket) -> (host_port, data)
지정된 소켓에서 UDP 패킷을 읽고 (host_port, data)
의 튜플을 반환합니다. 여기서 host_port
는 적절하게 InetAddr{IPv4}
또는 InetAddr{IPv6}
가 됩니다.
Julia 버전 1.3 이전에는 첫 번째 반환 값이 주소(IPAddr
)였습니다. 버전 1.3에서는 InetAddr
로 변경되었습니다.
Sockets.setopt
— Functionsetopt(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
— Functionnagle(socket::Union{TCPServer, TCPSocket}, enable::Bool)
네이글 알고리즘은 여러 개의 작은 TCP 패킷을 더 큰 패킷으로 묶습니다. 이는 처리량을 개선할 수 있지만 지연 시간을 악화시킬 수 있습니다. 네이글 알고리즘은 기본적으로 활성화되어 있습니다. 이 함수는 주어진 TCP 서버 또는 소켓에서 네이글 알고리즘이 활성화되어 있는지 설정합니다. 반대 옵션은 다른 언어에서 TCP_NODELAY
라고 불립니다.
이 함수는 Julia 1.3 이상이 필요합니다.
Sockets.quickack
— Functionquickack(socket::Union{TCPServer, TCPSocket}, enable::Bool)
리눅스 시스템에서는 TCP_QUICKACK가 socket
에서 비활성화되거나 활성화됩니다.