我有一个非阻塞的 winsock 套接字,它正在recv
循环中输入数据。
我注意到,当使用 putty 和原始套接字连接时,发送消息工作得很好。但是,当与此特定客户端交互时,数据包似乎没有触发成功的非MSG_PEEK
调用recv
. 我记得几年前有一个类似的问题,它最终不得不结束数据包\r
或来自客户端的东西,在这种情况下这是不可能的,因为我无法修改客户端。
Wireshark 显示通过的数据包很好;但是,我的服务器程序运行不正常。
我将如何解决这个问题?
编辑:将缓冲区大小降低到例如 8 会导致在没有 MSG_PEEK 的情况下成功调用 recv。
接收调用:
iLen = recv(group->clpClients[cell]->_sock, // I normally call without MSG_PEEK
group->clpClients[cell]->_cBuff, CAPS_CLIENT_BUFFER_SIZE, MSG_PEEK);
if(iLen != SOCKET_ERROR)
{
...
套接字是AF_INET
和。SOCK_STREAM
IPPROTO_TCP