如何限制客户端服务器程序中的连接数
我想要一个服务器程序,它应该只接受最多一个连接,它应该丢弃其他连接。 我怎样才能做到这一点?
只accept()
一个连接。
这是典型的服务器例程:
s = socket(...); bind(s, ...); listen(s, backlog); while (-1 != (t = accept(s, ...))) { // t is a new peer, maybe you push it into an array // or pass it off to some other part of the program }
每次完成的accept()
调用都会返回新连接的文件描述符。 如果您只希望收到一个连接,则只accept()
一次。 大概是你在这之后听完了,所以关闭你的服务器:
s = socket(...); bind(s, ...); listen(s, backlog); t = accept(s, ...); close(s); // do stuff with t
如果您希望一次只处理一个连接,并在该连接关闭后继续侦听,则执行上面的accept()
循环,并接受进一步的连接,直到t
关闭。
您想拒绝所有连接还是排队? 我认为你所寻找的是所谓的“单身人士”。 看看威卡帕迪亚的Singleton设计模式。
更正见下方:
您可以在listen方法中定义接受的请求数量。
listen(socketDescription, numberOfConnectionsPending);
第二个参数用于设置挂起连接的数量,而不是连接本身的数量。
如果将numberOfConnections设置为1,则向服务器发送请求的所有其他客户端将收到超时错误 。
在这里您可以找到更多信息: http : //shoe.bocks.com/net/#listen
我读错了听文档。 您应该使用Matt的答案中描述的accept方法。