第二次调用 Accept() 为同一客户端请求提供新的套接字

标签 c sockets

我喜欢用两个线程编写一个服务器程序,一个线程用于接受请求并将它们排队。第二个,工作线程,用于处理它们(我还没有写这个)。这是伪代码。

    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/

相关文章:

Android - 全局跟踪看不见的通知,最佳实践

c - 套接字发送客户端-服务器文件

c - cdecl 调用约定为什么调用者必须清除堆栈?

c++ - strstr 是否有反向功能

c - 递归函数查找回文

c - 我将如何使用整数变量执行八进制算术?

c# - 停止 TcpListener 的正确方法

c++ - 如何调用带参数的外部程序?

c - 强制套接字函数创建一个旧的 id

C# 异步 TCP 套接字 : Handling buffer size and huge transfers