linux下tcp编程如何正确的关闭套接字?

假设服务端有段代码,开了两个线程,一个处理客户端连接,一个读取客户端发送的消息。

m_fd = socket(AF_INET, SOCK_STREAM, 0);

bind(...);
listen(...);

pid_t pid;
while (1)
{
    m_client_fd = accept(m_server_fd, (sockaddr*)&client_addr, &len);

    pid = fork();

    if (pid == 0) // 子进程
    {
         close(m_fd); // 关闭

         do_read_from_client(m_client_fd); // 处理m_client_fd客户端发过来的消息

         close(m_client_fd); // 关闭
         exit(EXIT_SUCCESS);
    }
    else
    {
         close(m_client_fd); // 关闭
    }
}

/**********************这边还有一个关闭***************************/

close(m_fd); // 关闭

/****************************************************************/

在涉及到多线程的时候,如何正确的关闭文件描述符 fd,我上面的写法对么?

阅读 6.5k
2 个回答
  1. 你并不是只开了 2 个进程,而是来一个请求就开一个进程
  2. m_server_fd 哪里出来的?
  3. 明确下 进程 和 线程,在线程中可不一样

如果 m_server_fd 和 m_fd 是一个东西,只是写错了,那就没啥问题

不对

服务端套接字 不用关闭 关闭了就收不了请求了,
客户端套接字在子进程中关闭就行了, 不能在父进程关闭, 父进程关了 子进程万一执行慢不就读不到了吗

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题