在服务器 - 客户端程序服务器中可以监听多个客户端。
listen(sockfd,5);
这是否意味着服务器可以同时处理5个客户端。或者我必须使用多线程?
答案 0 :(得分:6)
不,这意味着5个客户端可以在不调用accept
的情况下进行连接。在这5个客户端连接(实际上略多于5个)后,新连接将失败。
堆栈“接受”连接(完成握手),无需您的干预。因此,如果您使用嗅探器,则无需致电accept
,您将看到成功的握手。当您真正决定accept(2)
连接时,堆栈只是将它提供给您。
答案 1 :(得分:2)
这意味着在连接失败之前,它们是最多5个连接的队列,除非您开始接受它们。它正在查看Apache源代码,因为我认为它是实现服务器的优秀模板。
答案 2 :(得分:2)
我会说是,第二个参数为您提供待处理连接队列的最大长度(来自手册页http://linuxmanpages.com/man2/listen.2.php)。 不,不需要多线程。
答案 3 :(得分:1)
上面的表达式表示5个客户端正在排队,如果队列已满,则会忽略第6个客户端。你必须使用accept()来读取队列,以便其他人可以连接。你可以阅读这个链接http://linux.die.net/man/2/connect,并进一步阅读有关高级套接字编程的select()。如果要使用fork()一次为多个客户端提供服务,则可以使用多线程。