Пишу небольшой сервер. Все работает. Только два нюанса. После того, как 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 все работает, даже с большим количеством параллельных запросов.
Может кто-то встречался с такой проблемой?