recv无法接受数据
我在客户端连接号服务器之后,用下面的代码接收数据
len = ::recv ( m_sock, buf, MAXRECV, 0 );
如果是堵塞模式,那么就会死在这儿,一直没有数据返回。但是服务器端是有数据发出的的。
如果我用ctl+c关闭服务器端,马上就会收到数据。
如果我用非堵塞模式,这个函数马上返回,不会接收到任何数据。
处于堵塞模式的时候,如果我在recv前使用了select,那么这个select也会一直堵塞,直到超时返回0,这时即使ctl+c关闭服务器端,也不会收到数据,希望各位英雄帮忙,很急。
------解决方案--------------------非堵塞模式下如果返回-1而errno为EAGAIN,你可以继续去读,用一个while循环即可,也可以在服务器端发送特定的字符串比如“DONE”通知客户端退出。
------解决方案--------------------堵塞模式下数据没有达到MAXRECV这么多的话,是不会返回的。
------解决方案--------------------建议你要一个线程专门用来接收,这样能响应快点!而且不易错问题!
------解决方案--------------------支持2楼的说法