我想要一个服务器程序,它应该只接受最多一个连接,它应该丢弃其他连接。我怎样才能做到这一点?
问问题
2636 次
3 回答
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
关闭。
于 2010-11-12T21:01:40.087 回答
1
更正见下文:您可以在listen方法
中定义接受请求的数量。
listen(socketDescription, numberOfConnectionsPending);
第二个参数用于设置挂起的连接数,而不是连接数本身。
如果将numberOfConnections设置为 1,则向服务器发送请求的所有其他客户端都将收到超时错误。
在这里您可以找到更多信息:http ://shoe.bocks.com/net/#listen
我读错了听文档。您应该使用马特的回答中描述的接受方法。
于 2010-11-12T12:38:05.300 回答
0
您要拒绝所有连接还是要排队?我认为您正在寻找的是所谓的“单例”。查看 wikipadia 中的 Singleton 设计模式。
于 2010-11-12T12:36:13.293 回答