Разница между `socket.close ()` и `socket.fromfd ()` для закрытия файлового дескриптора, связанного с сокетом? - PullRequest
1 голос
/ 06 июля 2019

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

...