Странный адрес клиента, возвращенный через функцию accept (..) - PullRequest
1 голос
/ 21 марта 2010

Я новичок в программировании сокетов. Вот фрагмент кода:

struct sockaddr_storage client_addr;

...

client_addr_size = sizeof(client_addr);
client_socket = accept( server_socket,
    (struct sockaddr *)&client_addr, &client_addr_size );

...

result = inet_ntop( AF_INET,
    &((struct sockaddr_in *)&client_addr)->sin_addr,
    client_addr_str, sizeof(client_addr_str) );

Я работаю как сервер. Когда клиент подключается, адрес, который я получаю, равен 0.0.0.0 независимо от хоста. Кто-нибудь может объяснить, что я делаю не так?

Спасибо.

Ответы [ 3 ]

2 голосов
/ 22 марта 2010

Проверка client_addr.ss_family - возможно, возвращается семейный адрес AF_INET6.

0 голосов
/ 22 марта 2010

Просто предположение - что такое объявление client_addr_str? Если это char*, то sizeof(client_addr_str) вернет размер указателя (4 или 8, в зависимости от 32- или 64-битной платформы.) Попробуйте следующее:

char client_addr_str[INET_ADDRSTRLEN];
if ( inet_ntop( AF_INET,
    &((struct sockaddr_in *)&client_addr)->sin_addr,
    client_addr_str, INET_ADDRSTRLEN ) == NULL )
{
    /* complain */
}
0 голосов
/ 21 марта 2010

Можете ли вы показать немного больше кода ... к какому IP-адресу / услуге вы пытаетесь подключиться?

Подсказка находится в самом IP-адресе 0.0.0.0, обычно в ситуации, когда сетевому интерфейсу не назначен IP-адрес, возможно, ищет DHCP-сервер, чтобы возобновить / принять аренду DHCP откуда-то ..

Я стреляю себе в ногу, поскольку вы не предоставили достаточно информации и, следовательно, сочтете это несправедливым, и в результате получите отрицательный ответ, поскольку этот ответ не удовлетворяет ваш вопрос !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...