Пишу небольшой сервер. Все работает. Только два нюанса. После того, как accept первый раз возвращает «-1», последующие вызовы этой функции начинают возвращать «0» вместо IP адреса.
Вот кусочек кода:
memset(&c_sock_info,0,addr_length);
c_sock=accept(m_sock,(struct sockaddr *)&c_sock_info,(socklen_t*)&addr_length);
if (c_sock<=0) continue;
if (c_sock>0) {
sendbuff_size=0;
sendbuff[0]=0;
memset(buf,0,MAXRECV+1);
int status=recv(c_sock,buf,MAXRECV,O_NONBLOCK);
char *ip=strdup(inet_ntoa(c_sock_info.sin_addr));
…
Вторая проблема в том, что сервер попросту вываливается, если в MSIE просто подержать F5. При тестировании через ab все работает, даже с большим колличество параллельных запросов.
Может кто-то встречался с такой проблемой?