我用 WSAWaitForMultipleEvents模型写了一个网络服务端,端口为8888 然后我用google浏览器访问 localhost:8888 ,服务器可以响应3次fd_accept事件,然后因为维护了一个socket数组,每次成功响应fd_accept事件就利用accept()构建一个socket来做数据传输,于是就会生成3个sAcceptSocket,但是等待很久,一般会触发FD_CLOSE事件,但是不会有3次,而是1次到2次,于是数组中总是会不断积累新的sAcceptSocket,最终会达到64的最大值,然后WSAWaitForMultipleEvents就不再响应任何事件了,是什么原因?

解决方案 »

  1.   

    WSAWaitForMultipleEvents函数可等待的最大值是WSA_MAXIMUM_WAIT_EVENTS。你要动态维护你的sAcceptSocket数组,FD_CLOSE以后,你需要closesocket关闭套接字,然后从数组中删除掉
      

  2.   

    chrome浏览器关闭,看是否会受到所有的CLOSE,然后你清除对应的数组中SOCKET
      

  3.   

    建议的解决方案:
    1. 收到FD_CLOSE后,调用closesocket关闭连接,并清除数组中的socket.
    2. 服务器发送完数据后,主动关闭socket,并清队数组中的socket.
    这里有个HTTP服务器程序,与你的类似,可以参考一下,解压后找WebSrv目录.下载地址:http://download.csdn.net/detail/geoff08zhang/4571358