socketfd
在 BSD 套接字上多次调用 close() 是否安全?
问问题
1222 次
2 回答
3
从手册:
close()
成功返回零。出错时-1
返回,并errno
进行适当设置。错误
EBADF fd isn’t a valid open file descriptor.
因此,close
调用将因上述错误而失败是有道理的。(这确实是我的机器上发生的事情。)
于 2012-09-17T16:52:39.767 回答
1
EBADF
正如其他人所提到的,如果文件描述符在初始关闭后没有被(重新)用于任何内容,您将得到一个。
通常的做法是在 fd 关闭后为其分配一个无效编号。一个常用的成语
close(fd);
fd = -1;
应该是使用的成语。这样,再次关闭套接字将导致静默EBADF
并且不会破坏新分配的有效文件描述符的状态。
(请注意,“无效文件句柄”的值在其他平台上可能不同.. 即 windows (?);但应该适用于任何 POSIX 系统)。
于 2012-09-19T16:08:36.117 回答