1. 同时发送多个WSARecv消息处理,多余的会有什么情况?
使用代码测试,显示结果为全部返回错误997,表示都可以正常发出recv操作,且多个工作线程同时在检测此socket的多个recv消息,运行片刻立即关闭Client端,发现工作线程出现的异常,1个或2个工作线程中的closesocket函数调用失败,错误码为10038,因此要尽力避免对同一个socket向完成端口发送重复的同一信息。在接受数据时并没有出现重复现象(内部有同步),也就是说只有在断开socket时会有很小不出错的可能,跟线程调度有关。
测试代码如下:Server端:
(侦听线程)
......
//成功与Client建立连接
while(1)
{
while(WSARecv(Accept, &(PerIoData->DataBuf), 1, &RecvBytes, &Flags,
&(PerIoData->Overlapped), NULL) ==SOCKET_ERROR && WSAGetLastError() ==ERROR_IO_PENDING)
{