A conexão com o IP 0.0.0.0 é bem-sucedida. Como? Por quê?

35

Estamos atendendo uma porta no host local e queremos verificar em outro processo se a porta estiver disponível. Devido a um erro em nosso código, ele está realmente tentando se conectar ao IP 0.0.0.0:<port> e, por algum motivo, é bem-sucedido - como a strace prova:

[...]
connect(3, {sa_family=AF_INET, sin_port=htons(10002), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
[...]

O que isso significa? Por que isso funciona?

    
por erikbwork 26.01.2018 / 17:12

1 resposta

62

0.0.0.0 como endereço de destino refere-se a um host não roteável ou a “este host” . Na prática, conectar-se a 0.0.0.0 é equivalente a conectar-se ao host local. (Estritamente falando, não é válido como um endereço de destino, apenas como um endereço de origem, mas a prática não corresponde à teoria.)

Ao vincular, "este host" se expande para "qualquer endereço nesse host" - assim, os aplicativos geralmente aceitam conexões vinculadas a 0.0.0.0, o que significa que receberão pacotes endereçados a qualquer endereço IPv4 no sistema.

    
por 26.01.2018 / 17:21