日期:2014-05-16  浏览次数:21322 次

recv无法接受数据
我在客户端连接号服务器之后,用下面的代码接收数据
len   =   ::recv   (   m_sock,   buf,   MAXRECV,   0   );
如果是堵塞模式,那么就会死在这儿,一直没有数据返回。但是服务器端是有数据发出的的。
如果我用ctl+c关闭服务器端,马上就会收到数据。

如果我用非堵塞模式,这个函数马上返回,不会接收到任何数据。

处于堵塞模式的时候,如果我在recv前使用了select,那么这个select也会一直堵塞,直到超时返回0,这时即使ctl+c关闭服务器端,也不会收到数据,希望各位英雄帮忙,很急。

------解决方案--------------------
非堵塞模式下如果返回-1而errno为EAGAIN,你可以继续去读,用一个while循环即可,也可以在服务器端发送特定的字符串比如“DONE”通知客户端退出。


------解决方案--------------------
堵塞模式下数据没有达到MAXRECV这么多的话,是不会返回的。
------解决方案--------------------
建议你要一个线程专门用来接收,这样能响应快点!而且不易错问题!
------解决方案--------------------
支持2楼的说法