Насколько я понимаю, в Solaris errno 150
ссылается на EINPROGRESS
, который может быть установлен вызовом connect()
.
Я не уверен, что recv()
может установить для errno значение EINPROGRESS
, по крайней мере, в Linux это не так.Таким образом, вы можете оказаться на неверном следе, глядя на recv()
.
. В любом случае, если для errno установлено значение EINPROGRESS
на connect()
, это не обязательно указывает на ошибку, но как-то ненормальное поведение процессасоединение с точки зрения того, чтобы быть медленнее, чем ожидалось.
См. Справочную страницу connect()
для получения подробной информации о том, как справляться с такими ситуациями.
Поскольку справочная страница Linux для connect () действительно говорит нам гораздо больше, чем страница Solaris, которую я настоящим цитируюпервое:
EINPROGRESS Разъем неблокируемый, и соединение не может быть установлено немедленно.Можно выбрать (2) или опрос (2) для завершения, выбрав сокет для записи.После того, как select (2) указывает на возможность записи, используйте getsockopt (2), чтобы прочитать параметр SO_ERROR на уровне SOL_SOCKET, чтобы определить, успешно ли завершено connect () (SO_ERROR равен нулю) или неудачно (SO_ERROR является одним из обычных кодов ошибок, перечисленных здесь, объясняяпричина неудачи).