2011-09-22 210 views
0

服务器端客户端程序服务器可以侦听多个客户端。服务器端客户端程序C

listen(sockfd,5); 

是否意味着服务器可以同时处理5个客户端。或者我必须为此使用多线程?

回答

6

不,这意味着5个客户端可以连接,而无需拨打accept。这5个客户端连接后(实际上略多于5个),新的连接将失败。

堆栈“接受”连接(完成握手),无需您的干预。因此,如果您不打电话accept,如果您使用嗅探器,您将看到成功的握手。当你真的决定连接accept(2)时,堆栈只会给你。

2

这意味着,除非您开始接受它们,否则在连接失败之前,它们是最多5个连接的队列。它正在研究Apache源代码,因为我认为它是实现服务器的极好模板。

1

上面的表达意味着5个客户正在排队,如果队列已满,第6个客户将被忽略。您必须使用accept()来读取队列,以便其他人可以连接。你可以阅读这个链接http://linux.die.net/man/2/connect并进一步阅读关于select()的高级套接字编程。如果您想使用fork()一次提供多个客户端,则可以使用多线程。