Las llamadas están trabajando, pero ya que no se unió el zócalo de forma explícita, el sistema operativo o biblioteca del sistema asigna implícitamente un puerto y enlace predeterminado para usted (exactamente el mismo que cuando se llama a connect(2)
sin llamar primero bind(2)
). Además, ya que preguntaste sobre las cosas del TCP anteriormente, supongo que estás hablando de enchufes de Internet aquí.
Averiguar a qué nombre el sistema operativo enlaza el sistema operativo varía, por lo que tendrá que buscar su sistema operativo específico, pero la mayoría de los sistemas operativos proporcionan una herramienta netstat
o similar que puede usar para consultar qué aplicaciones están escuchando en qué puertos.,
Como John menciona en un comentario, puede usar getsockname(2)
para encontrar el nombre de un socket encuadernado. Aquí está un ejemplo corto:
// ...
// Create socket and set it to listen (we ignore error handling for brevity)
int sock = socket(AF_INET, SOCK_STREAM, 0);
listen(sock, 10);
// Sometime later we want to know what port and IP our socket is listening on
socklen_t addr_size = sizeof(struct sockaddr_in);
struck sockaddr_in addr;
getsockname(sock, (struct sockaddr *)&addr, &addr_size);
addr
contendrá ahora la dirección IP y el puerto al que está escuchando en toma.
La llamada getsockname() le dará la dirección/puerto que asignó el sistema operativo. –
Buen punto, John ... Agregaré un código de ejemplo. –