我想要一个服务器程序,它应该只接受最多一个连接,它应该丢弃其他连接。我怎样才能做到这一点?
答案 0 :(得分:4)
仅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
关闭。
答案 1 :(得分:1)
更正请参阅下方:
您可以在 listen 方法中定义接受的请求数量。
listen(socketDescription, numberOfConnectionsPending);
第二个参数用于设置待处理连接数,而不是连接数本身..
如果将 numberOfConnections 设置为1,则向服务器发送请求的所有其他客户端都将收到超时错误 .. < / p>
您可以在此处找到更多信息:http://shoe.bocks.com/net/#listen
我读错了听文档。您应该使用Matt的答案中描述的accept方法。
答案 2 :(得分:0)
您要拒绝所有连接还是排队? 我认为你所寻找的是所谓的“单身人士”。 看看威卡帕迪亚的Singleton设计模式。