Как для блокирующих, так и для неблокирующих сокетов, вам нужно всего лишь один раз вызвать connect()
.
Когда сокет неблокирующий и connect()
возвращает EINPROGRESS
, нужно дождаться, пока сокет не станетготов к записи, используя select()
.Когда select()
сообщает, что сокет готов к записи, connect()
может быть успешным или неудачным.
Чтобы проверить, успешно ли неблокирующая connect()
, вы можете позвонить getsockopt(..., SOL_SOCKET, SO_ERROR, ...)
, которая сообщаетноль ошибок при сбое или вызов getpeername()
, который выполняется только на подключенном сокете.