1

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

4

3 回答 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 回答