Несколько методов, которые можно использовать для предотвращения ошибок чтения в сетевых сокетах:
- Использовать неблокирующий ввод-вывод вместе с механизмом опроса, например select или poll. 1 Это позволит дождаться, пока что-то произойдёт в сокете с регулируемым периодом ожидания. 1
- Избегать синхронных сетевых запросов к основному потоку. 2 При выполнении сетевых операций на основном потоке нужно использовать только асинхронные вызовы. 2
- Установить надлежащие тайм-ауты при использовании select. 2 Системный вызов позволяет указывать промежуток времени для ожидания перед возвращением управления к коду. 2
- Проверить возвращаемые значения при чтении из сокета. 2 Ошибки EAGAIN и EWOULDBLOCK, указывающие, что никакие данные не доступны при чтении, являются нормальными, нефатальными. 2 Программа не должна закрывать соединение, когда получает их. 2
- Использовать мультиплексирование сокетов. 34 Стратегия работы с соединениями, предполагающая создание нескольких потоков, каждый из которых опрашивает множество сокетов, считывает из них данные и затем обрабатывает их. 34