Aquí está el código. Es lo mismo que el código de esta pregunta similar: http://monkey.org/freebsd/archive/freebsd-stable/200401/msg00032.html. Cuando lo ejecuto siempre obtengo la salida:getsockname siempre devuelve 0.0.0.0?
escuchando en 0.0.0.0:54493 o algo así. Obviamente, el puerto cambia, pero no tengo idea de por qué sigo obteniendo una dirección IP de 0.0.0.0. ¿Me estoy perdiendo de algo?
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main()
{
int sock;
int len = sizeof(struct sockaddr);
struct sockaddr_in addr, foo;
if((sock=socket(AF_INET, SOCK_STREAM, 0))<0)
{
exit(0);
}
memset(&addr, 0, sizeof(struct sockaddr_in));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = INADDR_ANY;
addr.sin_port = htons(0);
if(bind(sock, (struct sockaddr *) &addr, sizeof(struct sockaddr_in))<0)
{
perror("bind");
exit(0);
}
if(listen(sock, 5)<0)
{
perror("listen");
exit(0);
}
getsockname(sock, (struct sockaddr *) &foo, &len);
fprintf(stderr, "listening on %s:%d\n", inet_ntoa(foo.sin_addr),
ntohs(foo.sin_port));
return 0;
}
Entonces, ¿cómo especifica que no quiere 0.0.0.0? –
Cómo enlazar el zócalo para la dirección IP específica. – Bhuvanesh