一个很基础的socket问题,如何保持最多5个用户的连接接
不用MFC的类,直接用socket,面向有连接的套接字,我如何保持5个用户的最大连接.一般accept是写在一个while循环里面的,accpet好像有空闲等待处理,使这个循环不止于像个死循环,而占用太多处理器时间,我想保持最大的5个连接,该怎么做?我最初是这么干的
SOCKET svrSk = socket(......);
SOCKET scSk[5];
for( i = 0; i < 5; i++) scSk[i] = INVALID_SOCKET;
bind(svrSk,...);
listen(svrSk,....);
while(true)
{
if(scSk[i] == INVALID_SOCKET && count < 5)
{
scSk[i] == accept( svrSk, ...);
count = count + 1;
}
###
}
但是一旦有了5个连接后,那么这个循环就像个死循环了,我现在是又在###处加了个新的SOCKET,用来出来那些超过以后的连接用户.我加了这么句
SOCKET tmpSock = accept(svrSk,....);
我想知道一般设置最大的连接数目的经典做法是什么样的,希望高人能指点.
[解决办法]
就在listen里设置。
这样在accept时,如果已经accept5个了,则新的连接请求被拒绝,直到某个客户端结束了连接。
[解决办法]
accept会阻塞,不会占用CPU.
[解决办法]
OnAccept()
if(count <5)
count++
bindsocket
else
closesocket
OnClose()
count--
[解决办法]
先accept,判断socket数量,超过就closesocket
[解决办法]
简单点你用一个变量记录accept的数目,超过了就closesochet,然后continue到accept,否则变量递增,用户断开就将变量递减