考虑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中被称为“糖”?