关于网友提出的“ socket发送与接收的困惑”问题疑问,本网通过在网上对“ socket发送与接收的困惑”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: socket发送与接收的困惑
描述: 发送端发送1000字节,接收端发生FD_READ事件,假设这1000字节完整地一次性发送到了接收端
在事件处理中,用recv读出500字节即返回
此时发送端数据已发送完成,不再发新数据,
请问接收端是否还会产生FD_READ事件来提醒我还有500字节未处理
解决方案1: 你用的是UDP的,后面的会丢弃掉。UDP的要么全收,要么一个字节都收不到!
解决方案2:
会的,每次有数据到来时,都会产生FD_READ
解决方案3: 学习~
解决方案4: 顶一下,学习中
解决方案5: 不会再有FD_READ,但Recv是从缓冲区里面取数据的,取多少你自己可以定的,没有取完可以继续调用Recv接着取,直到Recv返回0为止,这时表示缓冲区的数据取完了。。
解决方案6: 缓冲区有数据的话,需要判断返回值来判断是否需要继续调用recv
解决方案7: 如果只是单纯recv的话,那么后500字节就做丢弃处理。这取决你接收数据缓冲区的大小。一般发送缓冲区和接受缓冲区是相等的,或者接受的大于发送的。
解决方案8: 不会再有FD_READ,但是那些没有取出的数据是保存在socket数据系统缓冲区中的,如果你不关闭socket,这些数据一直在,如果你调用recv,那还可能取得那些数据。
解决方案9: 缓冲区有数据就可以select到FD_READ
解决方案10: 不会再有FD_READ风络事件通知。
以上介绍了“ socket发送与接收的困惑”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/2996471.html