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

发布于 2022-09-07 07:52:19 字数 723 浏览 21 评论 0

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

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,我上面的写法对么?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

躲猫猫 2022-09-14 07:52:19
  1. 你并不是只开了 2 个进程,而是来一个请求就开一个进程
  2. m_server_fd 哪里出来的?
  3. 明确下 进程 和 线程,在线程中可不一样

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

雨夜星沙 2022-09-14 07:52:19

不对

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文