用于关闭与套接字关联的文件描述符的`socket.close()`和`socket.fromfd()`之间的区别?

时间:2019-07-06 06:50:25

标签: linux python-3.x macos network-programming python-3.7

考虑fd的基础文件描述符socket

我遇到以下问题,在客户端断开连接时使用socket.close(fd)(Python 3.7)关闭fd。当客户端重新连接,并且操作系统分配了相同编号的fd时,尝试从fd进行读取时会引发错误:

Traceback (most recent call last):
  File "poll.py", line 37, in <module>
    buf = os.read(fd, 4096)
OSError: [Errno 9] Bad file descriptor

如果我改为通过以下代码关闭fd,则一切正常,并且可以从新创建且编号相同的fd中读取内容:

c = socket.fromfd(fd, socket.AF_INET, socket_SOCK_STREAM)
c.close()

有人可以解释这种行为吗?在上述代码中,socket.closefd(fd)是不是在Python 3.7中被称为“糖”?

0 个答案:

没有答案