原来的代码是这样的(send调用的情况类似): s32 len = recv( m_socket, data, len, 0 ); // printf("recv = %d\n", len); if( len==-1 && (errno==EAGAIN || errno==EWOULDBLOCK) ) { break; } recv/send之后有一行printf,是为了调试而新增的。 进程退到后台执行后,程序调用printf会产生errno=5的错误。 而socket在调用recv返回EAGAIN错误后,因为又调用了printf导致errno被修改了, 导致后面的判断条件认为是socket收发数据异常而断开了连接 所以就出现了上面的情况。 |
|