Дескриптор простоя tcp файла после неудачного подключения на HPUX - PullRequest
1 голос
/ 11 ноября 2009

У меня есть клиентский tcp-сокет (на c ++), в котором есть цикл, в котором он пытается открыть сокет и подключиться к серверу через определенный интервал до тех пор, пока он не будет успешным.

Ошибка в программе привела к тому, что close не вызывался в дескрипторе файла после неудачного соединения, и тот же (открытый) дескриптор снова использовался при вызове socket и connect в следующей итерации цикл при повторной попытке повторного подключения.

На машинах Linux это не вызывало никаких проблем, в то время как на HPUX это в конечном итоге приводило к ошибке 24 - «Слишком много открытых файлов» - lsof показывал их как TCP *:* (IDLE).

В чем разница между Linux и HPUX?

Ответы [ 2 ]

2 голосов
/ 11 ноября 2009

Я полагаю, что это происходит из-за того, что HPUX добавил сокеты в ядро. Если я правильно помню (с конца 1980-х), они добавили сокеты Berkeley в качестве разделяемой объектной библиотеки - по сути, один или два слоя поверх файловой системы ввода-вывода.

То, что UX продолжает вести себя таким образом, указывает на то, что вызов socket () не использует повторно неиспользуемые файловые дескрипторы, возможно потому, что он не знает о них, и ни одному инженеру по техническому обслуживанию не было поручено добавить это. В Linux socket () является такой же частью ядра, как и другие основные компоненты, поэтому, конечно, он знает, какие файловые дескрипторы доступны для повторного использования.

0 голосов
/ 11 ноября 2009

Похоже, что лимит файлов, которые процесс может открыть одновременно, равен 60 по умолчанию в HPUX , а в Linux - 1024 .

...