如何让服务端不再接受新连接? 也就是服务端如何限制最大客户端连接数?
在服务端收到FD_ACCEPT消息后:
case FD_ACCEPT:
{
   我不调用 accept
}
服务端没有再接收连接,这是对的。
但是,客户端成功接收到 FD_CONNECT 消息(并且此时 WSAGetLastError()==0)
也就是说客户端认为连接成功,怎么回事?难道我要服务端先accept,再closesocket,这岂不是多此一举?你们是如何解决这个问题的。

解决方案 »

  1.   

    listen(最大客户端连接数);
      

  2.   

    对,我觉得应该是这样,先接受,然后判断,再断开。有些FTP服务器就是这样做的,如果FTP设置了人数上限,你连接时就会发现:“Socket连接已经成功...人数达到上限....socket closed!”。
      

  3.   

    不能不调用accept,如果后面连接数降下来的话,会有很多连接堵在队列中。应该是接受连接后再断开。
      

  4.   

    试试用这种方法:现listen然后创建一定量数目的socket(这些socket不是监听socket,而是等待连接的socket),然后用异步方实调用AcceptEx,在overlapped和I/O completion模式下是可用的,在select模式下没用过,不知可否,
      

  5.   

    先listen
    再accept
    适当时候 closesocket
      

  6.   

    int listen(
      SOCKET s,    
      int backlog  
    );backlog 
    [in] 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.