diff --git a/lib/socket.c b/lib/socket.c index 1ad1dd9..116e991 100644 --- a/lib/socket.c +++ b/lib/socket.c @@ -317,6 +317,22 @@ iscsi_service(struct iscsi_context *iscsi, int revents) } if (iscsi->is_connected == 0 && iscsi->fd != -1 && revents&POLLOUT) { + int err = 0; + socklen_t err_size = sizeof(err); + + if (getsockopt(iscsi->fd, SOL_SOCKET, SO_ERROR, + &err, &err_size) != 0 || err != 0) { + if (err == 0) { + err = errno; + } + iscsi_set_error(iscsi, "iscsi_service: socket error " + "%s(%d) while connecting.", + strerror(err), err); + iscsi->socket_status_cb(iscsi, SCSI_STATUS_ERROR, + NULL, iscsi->connect_data); + return -1; + } + iscsi->is_connected = 1; iscsi->socket_status_cb(iscsi, SCSI_STATUS_GOOD, NULL, iscsi->connect_data);