Что делают сокеты Python с EINTR? - PullRequest
3 голосов
/ 02 мая 2011

Пока что мой сетевой код работает нормально, но я немного беспокоюсь о том, что спрятал под ковром:

Справочные страницы для accept, close, connect, recv и send указывают, что errno.EINTR может отображаться, когда системный вызов был прерван сигналом.

Я совершенно невежественен.

Что Python делает с этим? Он автоматически повторяет вызов, вызывает ли он ошибку socket.error с этим errno? Что мне следует делать, если возникает это исключение? Могу ли я генерировать эти сигналы самостоятельно в моих юнит-тестах?

1 Ответ

1 голос
/ 02 мая 2011

Python просто повторяет вызов и скрывает сигнал от пользователя (помогает с межплатформенной согласованностью, когда -EINTR не существует).Вы можете спокойно игнорировать проблему EINTR, но если вы все равно хотите ее проверить, это легко сделать.Просто установите операцию блокировки, которая не будет возвращаться (например, socket.accept без входящего соединения) и отправьте процессу сигнал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...