list<SOCKET>lstClient;
while(1)
{
sockClient=accept(sockSrv,(SOCKADDR*)&addrConn,&len);
if (sockClient==INVALID_SOCKET || sockClient==SOCKET_ERROR)
{
continue;
}
lstClient.push_back(sockClient);
}当我把做好的服务端发布到互联网上之后,然后用模拟的压力测试工具创建了500个客户端并发连接服务端,在服务端显示了
lstClient的数量(当前在线客户端数量),发现lstClient.size()总是大于500,总会多几个。
注:1、确定没有任何其他人会连我的这个服务程序;
2、这个现象在局域网或者本机测试不会出现。

解决方案 »

  1.   

    总觉得这个函数缺少了点什么
    个人感觉不安全对这个问题,最简单的方法是 DUMP 一下所有连接的IP 和PORT
    也许是压力测试软件因为某次连接超时 然后重新尝试连接导致的
      

  2.   

    lstClient.sort
    lstClient.unique
    然后应该是500,否则就是还有人连了。
    如果是500,就说明有些连接被重复发了,估计和TCP重传机制有关
      

  3.   

    对lstClient做过重复验证,发现多出的几个并不是重复的id。
    通过工具看服务端已经连上的客户端数量,是正确的。
    异步的也试过,现象一样。