файловые дескрипторы являются общими для всех потоков, поэтому закрытие его в одном потоке закрывает его для всех остальных потоков. close () освобождает fd при возврате вызова (если не происходит ошибка)
Обратите внимание, что close может вернуть ошибку:
Не проверка возвращаемого значения close является распространенной, но, тем не менее, серьезной ошибкой программирования. Вполне возможно, что ошибки в предыдущей операции write (2) сначала сообщаются при финальном закрытии. Не проверяя возврат
Значение при закрытии файла может привести к потере данных без вывода сообщений. Это особенно заметно при использовании NFS и дисковых квот.
Проверьте, не использует ли ваш дескриптор файла другие сокеты, возможно, вы пропускаете fds в другом месте - например, если вы открываете нормальные файлы