参考答案
结论:recv返回>0表示接收字节数,0表示对端关闭连接,-1表示出错并设置errno;可接受的错误包括EAGAIN/EWOULDBLOCK(非阻塞socket暂无可读数据)、EINTR(被信号中断)。核心要点:1. 返回0时应关闭本端socket;2. 返回-1时需检查errno,EAGAIN/EWOULDBLOCK在非阻塞模式下正常,可重试;EINTR可重新调用recv;3. 其他错误如EBADF、ECONNRESET通常不可恢复。示例:非阻塞recv返回-1且errno==EAGAIN,继续事件循环即可。