本帖最后由 VisualEleven 于 2012-06-30 12:05:13 编辑

解决方案 »

  1.   

    这种情况微软一定是有考虑的,AcceptEx在接受连接后接受第一包数据才返回,是基于性能考虑才这么设计的,但是正如你所说,恶意用户只连接不发包怎么办?你可以后台用线程检测你传递进去接受连接的那个socket,判断连接多久了而且一包数据都没发:int  nSecs; 
    int   nBytes= sizeof(int); 
    getsockopt(hAcceptSocket,SOL_SOCKET,SO_CONNECT_TIME,(char*)&nSecs, &nBytes); 
    nSecs是   -1   表示还未建立连接,   否则就是已经连接的时间. 
      

  2.   

    为了考虑性能 AcceptEx 应该直接返回,然后在完成通知中检测状态,判断无效的连接最好是应用层通过心跳来完成
      

  3.   

    为了考虑性能 AcceptEx 应该直接返回,然后在完成通知中检测状态,判断无效的连接最好是应用层通过心跳来完成
      

  4.   

    可以通过调用getsockopt(SO_CONNECT_TIME)得到连接的时长,如果超过指定的时间,就closesocket断开连接,这样避免长时间连接而不是发送任何的数据。