本帖最后由 VisualEleven 于 2010-11-16 11:45:54 编辑

解决方案 »

  1.   

    There is no standard provision to obtain the actual backlog value,没有一个标准方法。最后一个应答丢失时另一方重发FIN
      

  2.   


    它怎么知道最后一个应答丢失了呢?它只发了一个ACK包,然后什么也不做,就能知道这个包丢失了???
      

  3.   

    主动关闭方不检测ACK是否丢失。另一方在发出FIN之后等一个超时,没收到ACK就再发FIN
      

  4.   

    int listen(
      __in  SOCKET s,
      __in  int backlog
    );Parameters

    A descriptor identifying a bound, unconnected socket.backlog 
    The maximum length of the queue of pending connections. If set to SOMAXCONN, the underlying service provider responsible for socket s will set the backlog to a maximum reasonable value. There is no standard provision to obtain the actual backlog value.
      

  5.   

    1.listen的第二个参数不代表最大连接数,它是连接等待的数量,包括完成了3次握手但没有ACCEPT的连接和没有完成3次握手的连接,这个数字跟系统是有关系的,至少我不知道该怎么获取2.主动关闭方先发送一个fin,收到对方一个ACK,然后对方发送一个FIN,返回一个ACK,如果在对方没有收到这个ACK会再次发送一个FIN,等2msl的时间就是为了等待是否会再次收到一个FIN,如果收到了,表示对方没有收到刚才的那个ACK,需要再次发送一个ACK