gpt4 book ai didi

在 EPIPE 之后关闭套接字文件描述符

转载 作者:太空宇宙 更新时间:2023-11-04 02:26:47 26 4
gpt4 key购买 nike

通过调用 signal() 忽略 SIGPIPE 后,write() 调用可能会失败,errno 设置为等于 EPIPE。我是否仍需要像下面的示例那样关闭文件描述符?

if (write(sock_fd, buf, len) < 0) {
if (errno == EPIPE) {
close(sock_fd);
}
}

最佳答案

请记住,当您使用同名系统调用创建管道时,您会得到两个 文件描述符:一个用于读取,一个用于写入。当 read fd 已关闭时,您从写入操作中获取 EPIPE。写入 fd 仍处于打开状态。如果您尝试再次写入,您将再次获得 EPIPE。

(通常,发生这种情况时,管道是由 shell 或其他父进程设置的,并且读取的 fd 对您的程序永远不可用,但这对内核来说无关紧要。它在 < em>一些过程,现在不是。)

由于它仍处于打开状态,因此您确实需要将其关闭。但是,退出会自动关闭所有仍处于打开状态的 fds。因此,如果您在关闭管道后要做的下一件事是退出,那么您无需费心先关闭它。由于它是一个管道,并且您已经获得了 EPIPE,因此不会有任何 close 可能报告的延迟写入错误。

关于在 EPIPE 之后关闭套接字文件描述符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49988162/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com