我喜欢用两个线程编写一个服务器程序,一个线程用于接受请求并将它们排队。第二个,工作线程,用于处理它们(我还没有写这个)。这是伪代码。
while (1) {
newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);
read_from_newsockfd()
put_in_queue
// I am not closing the newsockfd here. If I close it here how
to I communicate with the client from my second worker thread.
}
现在,当我从浏览器发送请求时,第二次调用 accept() 为同一请求提供另一个套接字而不会阻塞。我尝试从不同的浏览器发送第二个请求,出现段错误。谁能告诉我如何解决这个问题?
最佳答案
浏览器是否可能发出多个请求,特别是/favicon.ico 以及 HTML?
我建议你使用 Wireshark查看网络级别的情况。
关于第二次调用 Accept() 为同一客户端请求提供新的套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7558104/