使用AcceptEx来监听,同时在一个连接断开后,调用DisconnectEx以重用socket,
但是在重用时,调用CreateIoCompletionPort,返回错误代码87,提示说参数错误?在一个套接字附加到完成端口后,调用DisconnectEx不会从完成端口撤销吗?那又怎么从一个完成端口撤销一个句柄呢?
或者说,应该以什么样的思路来实现?=
运行系统为 winxp sp3,已尝试 SO_UPDATE_ACCEPT_CONTEXT,但是仍然第二次 CreateIoCompletionPort 还是返回错误代码 87,这难道是一个正常情况?虽然程序运行是没有问题,但觉得这样好像不太合理。
但是在重用时,调用CreateIoCompletionPort,返回错误代码87,提示说参数错误?在一个套接字附加到完成端口后,调用DisconnectEx不会从完成端口撤销吗?那又怎么从一个完成端口撤销一个句柄呢?
或者说,应该以什么样的思路来实现?=
运行系统为 winxp sp3,已尝试 SO_UPDATE_ACCEPT_CONTEXT,但是仍然第二次 CreateIoCompletionPort 还是返回错误代码 87,这难道是一个正常情况?虽然程序运行是没有问题,但觉得这样好像不太合理。
也可以用DisconnectEx()重用1个socket,不用新建1个sokcet个人意见:
不用要AcceptEx 和 DisconnectEx这2个函数,//纯属臆测,没经过实践
那是不是说不用重新绑定端口了,CreateIoCompletionPort可省掉,
呵呵,真的没这样做过,你试试吧?
我已经说过了,程序运行正常,没有什么问题,只是隐约觉得不太妥当。关于AcceptEx和DisconnectEx,你可以看下 《Windows 网络编程 第二版》所以我觉得这样子系统内部应该会存在这么一个已经绑定到该完成端口的句柄列表,在调用DisconnectEx时,并没有撤销,
所以在重用该套接字时,只是它生效了而已,这样一来,如果在某个时刻有很多并发连接,那么,系统内部的这个句柄列表,
就会一直维持一个比较大的数目,这样对系统来说,是不是一个不好的设计呢?我一直在想,为什么没有一个API可以把一个句柄从一个完成端口撤销。
DisconnectEx 没有closesocket的过程,
没有closesocket完成端口就会一直绑定这个socket,
好象只有closesocket能把一个句柄从一个完成端口撤销,
而你又不想用closesocket,感觉你在绕圈......开个玩笑,向你学习~