同じポートを持つIPv4およびIPv6ソケット

同じポートを持つIPv4およびIPv6ソケット

AF_INETたとえば、2つのソケット(1つはシリーズを使用し、もう1つはシリーズを使用)を使用して、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

おすすめ記事