我在我的应用程序中使用 winsock 来维护客户端-服务器连接,并使用非阻塞套接字来做到这一点。但有时当我收到FD_READ
消息时,似乎recv()
返回的不是一个,而是两个数据包。
我尝试更改数据包的大小,使它们彼此不同,然后将其与recv()
返回的数据量进行比较。我 100% 确定我不时收到两个数据包。我认为我的 ping 功能应该受到指责。我的应用程序中有一个线程不时发送 ping 消息。然后对方回复了另一条消息。不确定这是否是最好的方法,但无论如何,现在都无所谓了。
我可以肯定的是,有时这些消息会“混合”,因此会recv()
立即返回“ping request”和“ping answer”。它是如何发生的?不应该只返回单个调用发送recv()
的数据量吗?send()
即使有时客户端或服务器收到“ping请求”消息并回复它,同时发送自己的“ping请求”消息,即使这种不幸的时机是可能的,另一方不应该能够将一个数据包与另一个数据包区分开来并返回每条FD_READ
消息一个?