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