以下是设置:
Server Client | | accept connect | | v | send msg1-> | | | v v recv <- send | | v v send msg2-> recv | | v v close
这是我的问题:
1.client在关闭之前居然收到了msg1,为什么会这样?
2.发送msg2正常返回。既然client收到msg1就关闭了,为什么send msg2成功了?
附:我正在为 TCP 使用流套接字。
最佳答案
recv
函数将获取接收缓冲区中的下一个内容。在客户端的情况下,如果套接字是数据报套接字,接下来是msg1。如果它是一个流套接字,则不维护消息边界,因此如果 msg2 已经到达并且在那里,recv 可以包含来自 msg1 和 msg2 的数据在 recv 缓冲区中有两个空间。send
不等待对方recv
消息,它只是将它添加到发送队列中。那时它不知道客户端是否会在读取连接之前关闭它。如果您需要知道应该让客户端发送响应以确认消息。
关于sockets - socket通信中send()和recv()的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2585195/