Ошибка сети на PASE на компьютере iSeries - PullRequest
1 голос
/ 17 мая 2011

Я запускаю серверную программу, написанную на C, работающую на PASE на машине iSeries.PASE (Portable AIX Solutions Environment) - это имитация AIX на машинах IBM iSeries.

Серверная программа - это итеративный tcp-сервер с установлением соединения.

Логика сервера содержит вызов метода accept (), который возвращает дескриптор сокета.Затем следует вызов ioctl () для установки неблокирования сокета с помощью F_IONBIO.

Этот вызов ioctl прерывается с перебоями, возвращает -1 с errno = 9 (EBADF: неверный дескриптор файла), примерно на 0,8%процентов раз это называется.Как только это происходит для определенного дескриптора сокета, следующие ошибки всегда для одного и того же дескриптора сокета и с одинаковым значением errno.

Когда это происходит, сбой на стороне клиента происходит с errno = 73, то есть соединение сбрасывается одноранговым узлом.

Сервер является процессом-демоном;поэтому stdin закрывается при инициализации и доступен на accept ().Первоначально я заметил, что ioctl () не работает для дескриптора сокета 0, но не всегда.Поэтому я попытался предотвратить повторное использование дескриптора сокета 0, установив для параметра stdin значение «/ dev / null», в случае, если это было проблемой.Но я не уверен, что это было главной проблемой.Тем не менее, чтобы получить результаты теста после этого изменения.

Проблема наблюдалась только на некоторых машинах, и обычно, когда машина загружена.Так что, похоже, это какое-то состояние гонки.Логика сервера хорошо протестирована и выглядит стабильной.

Наблюдались ли какие-либо проблемы с сокетами на платформе PASE или AIX?Может ли это быть связано с ОС?

Буду признателен за любую помощь / указатели по этой проблеме.

заранее спасибо,

avg

1 Ответ

1 голос
/ 04 июня 2011

Есть ли вероятность того, что вы столкнетесь с максимальным значением по умолчанию, равным 200 файловым дескрипторам на задание?

Если это так, вы можете использовать API-интерфейс DosSetRelMaxFH () - Изменить максимальное количество дескрипторов файлов , чтобы увеличить ограничение.

Если это не проблема, я предлагаю собрать и проверить трассировку SST-сообщения об ошибке. Для получения дополнительной информации см. Инструкции по отслеживанию соединений TCP / IP .

Далее я бы проверил уровни групповых PTF, особенно SF99315 TCP / IP Group PTF .

Служба поддержки IBM действительно полезна для отслеживания подобных проблем.

...