如何使用零字节recv检测IOCP服务器中的断开连接

时间:2019-01-11 06:43:30

标签: sockets server iocp

我目前正在为游戏实现IOCP服务器,并且正在尝试零字节记录技术。

我有3个问题。

  1. 如果您通过检查bytestransferred是否为0来了解与客户端的断开连接,那么如何区分接收完成和断开连接呢?

  2. 在处理实际接收过程时,我没有执行非阻塞模式recv(),因为客户端首先发送了实际数据的字节,所以我知道我要接收多少字节。我是否仍需要使用非阻止模式recv()

我正在这样做。

InputMemoryBitStream incomming;
std::string data;
uint32_t strLen = 0;

recv(socket, reinterpret_cast<char*>(&strLen), sizeof(uint32_t), 0);
incomming.resize(strLen);
recv(socket, reinterpret_cast<char*>(incomming.getBufferPtr()), strLen, 0);
incomming.read(data, strLen);

(InputMemoryBitStream用于读取压缩数据。)

  1. 每次执行per io dataWSARecv()时,我都会动态分配WSASend(),并在完成处理完的I / O之后立即释放它们。这样做效率低下吗?还是可以接受?我应该重用per io data吗?

谢谢。

0 个答案:

没有答案