Есть демон, слушает порт и отвечает клиентам. Он форкается и потом стоит в accept. Может нормально работать несколько суток. Потом в какой-то момент функция accept начинает возвращать 0.0.0.0 вместо адреса клиента.
Вот так открываю порт:
addr.sin_family=AF_INET;
addr.sin_port = htons(PORT);
addr.sin_addr.s_addr = inet_addr("0.0.0.0"); bzero(&(addr.sin_zero),8);
int iServer=socket(PF_INET,SOCK_STREAM,6);
i=1;
setsockopt(iServer,SOL_SOCKET,SO_REUSEADDR,&i,sizeof(i));
bind(iServer,(struct sockaddr*)&addr,sizeof(addr));
listen(iServer,64);
дальше в цикле:
memset(&clientAddr,0,sizeof(clientAddr));
int iClient = accept(iServer,(struct sockaddr*)&clientAddr,&addrlen);
if(iClient < 0 )
{
printf("error in accept\r\n %s",strerror(errno));
continue;
}
вот, что интересно, iClient при этом ошибку не возвращает, т.е. вроде как все работает...
Может кто подскажет, что не так делаю? Почему может проработать несколько суток без вопросов, а при следующем запуске вылететь через 5 минут...
Система FreeBSD 7.2