Рассмотрим базовый дескриптор файла 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 как "синтетический сахар" для приведенного выше кода?