icop从GetQueuedCompletionStatus获取长度为0的数据,这表示什么意思?该怎么解决
icop从GetQueuedCompletionStatus获取长度为0的数据,这表示什么意思?
我发现有时候从GetQueuedCompletionStatus获取通道数据的时候,数据长度为0,而缓冲区中的内容也确实为空。我初步判断是因为客户端非法关闭了链接,不知道是不是这个原因?求讨论
------解决方案--------------------
先判断函数的返回是否为TRUE或者FALSE.
然后可以判断GetQueuedCompletionStatus函数的第二个参数lpNumberOfBytes和lpOverlapped结构体中的数据是否有效,如果*lpNumberOfBytes的值为0,OVERLAPPED结构体中的数据也合法,可以认为是客户端关闭了连接,这个时候你就需要closesocket关闭socket套接字,可能还需要释放一下内存的操作(比如之前分配的PER_HANDEL/PER_IO结构)
我发现有时候从GetQueuedCompletionStatus获取通道数据的时候,数据长度为0,而缓冲区中的内容也确实为空。我初步判断是因为客户端非法关闭了链接,不知道是不是这个原因?求讨论
------解决方案--------------------
先判断函数的返回是否为TRUE或者FALSE.
然后可以判断GetQueuedCompletionStatus函数的第二个参数lpNumberOfBytes和lpOverlapped结构体中的数据是否有效,如果*lpNumberOfBytes的值为0,OVERLAPPED结构体中的数据也合法,可以认为是客户端关闭了连接,这个时候你就需要closesocket关闭socket套接字,可能还需要释放一下内存的操作(比如之前分配的PER_HANDEL/PER_IO结构)