我目前正在为游戏实现IOCP服务器,并且正在尝试零字节记录技术。
我有3个问题。
如果您通过检查bytestransferred
是否为0来了解与客户端的断开连接,那么如何区分接收完成和断开连接呢?
在处理实际接收过程时,我没有执行非阻塞模式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用于读取压缩数据。)
per io data
和WSARecv()
时,我都会动态分配WSASend()
,并在完成处理完的I / O之后立即释放它们。这样做效率低下吗?还是可以接受?我应该重用per io data
吗? 谢谢。