Согласно справочной странице recv
существует множество причин, по которым recv
может вернуть -1
(EAGAIN, EBADF, EINVAL, ENOMEM и т. Д.).Я бы посоветовал проверить errno
на соответствие ожидаемым возвращаемым значениям и изменить ваш код, чтобы он действовал соответствующим образом.Если вы пишете библиотеку, вы можете вернуть код ошибки библиотеки.Если вы являетесь заявителем, возможно, вы захотите умереть или вернуть код ошибки вызывающей стороне.Это будет зависеть от контекста.
Однако первым шагом к решению этой проблемы будет понимание различных кодов ошибок, которые могут быть возвращены, и их соответствующая обработка.