2012-06-17 2 views
-3

Если принять системный вызов, то возвращает ошибку, что ожидает обработка ошибок? следует закрыть розетку ??Какова должна быть обработка, если системный вызов accept() возвращает ошибку

+0

Зависит от того, что занимает 'errno'. – hmjd

+0

Этот вопрос слишком широк. Как embrion спрашивает врача «Что мне делать после родов» ... –

ответ

2

Это зависит от ошибки. При успешном завершении accept() возвращает сокет (файловый дескриптор) для нового соединения. Если это не удается, вам не нужно закрывать сокет, который вы не получили (например, многие системные вызовы, accept() возвращает -1, чтобы обозначить ошибку).

В зависимости от кода ошибки, однако, вы можете закрыть гнездо для прослушивания.

+0

Я не могу придумать много примеров, где 'accept' вернет ошибку, которая заставит вас закрыть сокет для прослушивания. Главное, о чем я могу думать, это если вы используете стиль программирования, в котором вы просто игнорируете возвращаемое значение 'socket',' bind' и 'listen' и полагаетесь на' accept', давая вам 'EBADF' или' EINVAL 'если какой-либо из предыдущих вызовов не удался. –

+0

@R ..: Вероятно, это скорее политическое решение, чем необходимость. Как вы говорите, EBADF и EINVAL будут проблемами с параметрами для 'accept()' самого вызова, но 'EMFILE' может быть причиной закрытия магазина (больше не осталось дескрипторов файлов для процесса). –

+0

Может быть. Я бы подумал, что на 'EMFILE' вы хотите просто подождать, пока другие соединения не закончатся, прежде чем принять их еще ... –

Смежные вопросы