【发布时间】:2011-09-22 12:18:44
【问题描述】:
在 server-client 程序中,服务器可以监听多个客户端。
listen(sockfd,5);
这是否意味着服务器可以同时处理 5 个客户端。或者我必须为此使用多线程?
【问题讨论】:
标签: c multithreading sockets
在 server-client 程序中,服务器可以监听多个客户端。
listen(sockfd,5);
这是否意味着服务器可以同时处理 5 个客户端。或者我必须为此使用多线程?
【问题讨论】:
标签: c multithreading sockets
不,这意味着 5 个客户端可以连接而无需您调用 accept。在这 5 个客户端连接后(实际上略多于 5 个),新连接将失败。
堆栈“接受”连接(完成握手),无需您的干预。因此,如果您不调用accept,如果您使用嗅探器,您将看到成功的握手。当您真正决定accept(2) 一个连接时,堆栈只会将其提供给您。
【讨论】:
这意味着除非您开始接受它们,否则在连接失败之前它们是最多 5 个连接的队列。它正在查看 Apache 源代码,因为我认为它是实现服务器的绝佳模板。
【讨论】:
我会说是的,第二个参数为您提供待处理连接队列的最大长度(来自手册页 http://linuxmanpages.com/man2/listen.2.php )。 不,不需要多线程。
【讨论】:
上面的表达式表示有 5 个客户端正在排队,如果队列已满,第 6 个客户端将被忽略。您必须使用 accept() 来读取队列,以便其他人可以连接。您可以阅读此链接http://linux.die.net/man/2/connect 并进一步阅读有关 select() 的高级套接字编程。如果您想使用 fork() 一次为多个客户端提供服务,则可以使用多线程。
【讨论】: