Существуют ли "хорошие" способы заставить поток, ожидающий вызова recvfrom (), разблокироваться и вернуться с ошибкой?
Мотивация для этого заключается в написании модульных тестов для системы, которая включает в себя модуль, который читает дейтаграммы UDP. Одна из ветвей обрабатывает ошибки в самом вызове recvfrom. Код не обязан различать различные типы ошибок, он просто должен установить флаг.
Я думал о том, чтобы закрыть сокет из другого потока или сделать остановку на нем, чтобы заставить recvfrom возвращаться с ошибкой, но это кажется немного тяжелым. Я видел упоминание в другом месте, что отправка пакета большого размера могла бы сделать это, и поэтому организовал эксперимент, в котором буфер 16 КБ отправлялся в recvfrom с ожиданием всего 4 КБ, но это не привело к ошибке. Recvfrom просто возвращает 4096, чтобы указать, что он получил столько байтов.