LINUX.ORG.RU

gethostbyaddr[_r]() виснит


0

0

Столкнулся с проблемой под Linux Red Hat 2.4.2 что после создания сокета. (после функций socket(), bind(), listen()) зависает функция gethostbyaddr() !! А до создания сокета работает нормально.

anonymous

а код слабо показать? не было у меня таких проблем вроде

Vinill ★★
()

Она скорее всего не виснет. А пытается обратиться к DNS серверу. Проверь, может у нее это почему-то не получается.

OxiD ★★★★
()

Нашёл, что перестаёт работать после вызова функции listen().

int main(int argc,char **argv) { int sock; struct hostent *hp; unsigned long addr;

sock=socket(PF_INET,SOCK_STREAM,0); addr=inet_addr("213.180.194.129"); hp=gethostbyaddr((const char *)&addr,sizeof(addr),AF_INET); if(hp && hp->h_name) printf("%s\n",hp->h_name); close(sock); return 0; } Это работает, но если вставить:

sockaddr_in servAddr; servAddr.sin_family = AF_INET; servAddr.sin_port = htons(6000); servAddr.sin_addr.s_addr = htonl(INADDR_ANY); bind(sock, (struct sockaddr*)&servAddr, sizeof(servAddr)); listen(socket, 5);

то зависает на gethostbyaddr() !!!!!!

anonymous
()
Ответ на: комментарий от anonymous

Нечего не гарантирую, но такая идея есть:

Попробуй попереставлять вхождения hosts в файле /etc/nsswitch.conf В частности, поставь ldap (если есть) на последнее место. Он до недавнего времени был довольно глючный. А files - на первое.

И пропиши (попробуй, что получится!) 213.180.194.129 в /etc/hosts.

И, кстати, ты, случаем, не статически линкуешься?

Die-Hard ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.