Apenas para ter certeza de que estamos na mesma página (sua pergunta é ambígua dessa maneira), pedir para ligar o TCP na porta 0 indica uma solicitação para gerar dinamicamente um número de porta não utilizado. Em outras palavras, o número da porta na qual você está realmente ouvindo depois da solicitação não é zero. Há um comentário sobre isso em [linux kernel source]/net/ipv4/inet_connection_sock.c
on inet_csk_get_port()
:
/* Obtain a reference to a local port for the given sock,
* if snum is zero it means select any available local port.
*/
Qual é uma convenção unix padrão. Pode haver sistemas que permitam o uso da porta 0, mas isso seria considerado uma prática ruim. Esse comportamento não é especificado oficialmente pelo POSIX, IANA ou pelo protocolo TCP. 1 Você pode encontrar isso é interessante .
É por isso que você não pode fazer uma conexão TCP com segurança para a porta zero. Presumivelmente, nc
está ciente disso e informa que você está fazendo uma solicitação não sensitiva. Se você tentar isso em código nativo:
int fd = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = 0;
inet_aton("127.0.0.1", &addr.sin_addr);
if (connect(fd, (const struct sockaddr*)&addr, sizeof(addr)) == -1) {
fprintf(stderr,"%s", strerror(errno));
}
Você recebe o mesmo erro que tentaria se conectar a qualquer outra porta indisponível: ECONNREFUSED
, "Conexão recusada". Então, em resposta a:
Where in the system is this handled? In the TCP stack of the OS kernel?
Provavelmente não; não requer manuseio especial. Ou seja, se você puder encontrar um sistema que permita ligar e escutar na porta 0, presumivelmente você poderá se conectar a ele.
1. Mas a IANA faz referenciá-lo como "Reservado" ( veja aqui ). Ou seja, essa porta não deve ser usada online. Isso faz tudo certo com relação à convenção de atribuição dinâmica (já que ela não será realmente usada). Estipular que especificamente como um propósito provavelmente estaria além do escopo da IANA; em essência, os sistemas operacionais são livres para fazer o que quiserem com isso, inclusive nada.