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

时间:2010-11-12 12:25:25

标签: c networking network-programming vxworks

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

3 个答案:

答案 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设计模式。