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,我上面的写法对么?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果 m_server_fd 和 m_fd 是一个东西,只是写错了,那就没啥问题
不对
服务端套接字 不用关闭 关闭了就收不了请求了,
客户端套接字在子进程中关闭就行了, 不能在父进程关闭, 父进程关了 子进程万一执行慢不就读不到了吗