Soquetes IPv4 e IPv6 com a mesma porta

2

É possível ter um único processo que tenha dois soquetes, um usando AF_INET e um usando as famílias AF_INET6 , enquanto ambos estão vinculados ao mesmo número de porta, por exemplo, 20000 ?

Se o soquete IPv6 setsockopt s fosse somente IPv6, o kernel direcionaria corretamente os pacotes para o soquete correto com base na versão do protocolo IP?

    
por Daniel Lovasko 11.09.2018 / 13:04

1 resposta

2

Sim, é possível (pode haver complicações dependendo da linguagem de nível superior e quão bem ela permite que você selecione esses detalhes).

#!/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

Com isso em andamento:

% 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
    
por 11.09.2018 / 16:11