동일한 포트를 가진 IPv4 및 IPv6 소켓

동일한 포트를 가진 IPv4 및 IPv6 소켓

AF_INET예를 들어, 두 개의 소켓(하나는 시리즈를 사용하고 다른 하나는 시리즈를 사용함) 을 사용 AF_INET6하여 둘 다 동일한 포트 번호에 바인딩되어 있는 프로세스를 가질 수 있습니까 20000?

IPv6 소켓이 setsockoptIPv6만 지원하는 경우 커널은 IP 프로토콜 버전에 따라 패킷을 올바른 소켓으로 올바르게 전달합니까?

답변1

예, 가능합니다. (고급 언어와 세부 사항을 선택할 수 있는 능력에 따라 복잡해질 수 있습니다.)

#!/usr/bin/env expect
set port 1234
proc v4 {fh caddr cport} { puts $fh v4; close $fh }
proc v6 {fh caddr cport} { puts $fh v6; close $fh }
socket -myaddr 127.0.0.1 -server [list v4] $port
socket -myaddr ::1 -server [list v6] $port
vwait godot

실행 중:

% lsof -i -nP | grep 1234
expect 96688 jhqdoe 10u IPv4 0xf7... 0t0 TCP 127.0.0.1:1234 (LISTEN)
expect 96688 jhqdoe 11u IPv6 0xf7... 0t0 TCP [::1]:1234 (LISTEN)
% nc 127.0.0.1 1234
v4
% nc ::1 1234
v6

관련 정보