Пишу небольшой сервер. Все работает. Только два нюанса. После того, как 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 все работает, даже с большим колличество параллельных запросов.
Может кто-то встречался с такой проблемой?
>Пишу небольшой сервер. Все работает. Только два нюанса. После того, как accept
>первый раз возвращает ?-1?,С каким errno?
>последующие вызовы этой функции начинают возвращать ?0?
>вместо IP адреса.
>
>Вот кусочек кода:
>
> memset(&c_sock_info,0,addr_length);
> c_sock=accept(m_sock, (struct sockaddr *) &c_sock_info, (socklen_t*) &addr_length);Как создан m_sock?
>
> 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 все работает, даже с большим
>колличество параллельных запросов.
>
>Может кто-то встречался с такой проблемой?