如何限制客户端服务器程序中的连接数

我想要一个服务器程序,它应该只接受最多一个连接,它应该丢弃其他连接。 我怎样才能做到这一点?

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方法。