aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndreas Schneider <asn@cryptomilk.org>2013-06-17 12:47:21 +0200
committerAndreas Schneider <asn@cryptomilk.org>2013-06-17 12:47:21 +0200
commit9ee45a18d7f12c64d2a33fa0474ce57d2dbe82bc (patch)
tree0b34b40de157fcae0f13805498f5b897292de02d /src
parent0ba075e9ce93bfbfa0faf0bd9c14b463bde44782 (diff)
downloadlibssh-9ee45a18d7f12c64d2a33fa0474ce57d2dbe82bc.tar.gz
libssh-9ee45a18d7f12c64d2a33fa0474ce57d2dbe82bc.tar.xz
libssh-9ee45a18d7f12c64d2a33fa0474ce57d2dbe82bc.zip
connect: Check return value of getsockopt().
Diffstat (limited to 'src')
-rw-r--r--src/connect.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/connect.c b/src/connect.c
index ae55b140..3517f265 100644
--- a/src/connect.c
+++ b/src/connect.c
@@ -139,6 +139,7 @@ static int ssh_connect_ai_timeout(ssh_session session, const char *host,
int timeout_ms;
ssh_pollfd_t fds;
int rc = 0;
+ int ret;
socklen_t len = sizeof(rc);
enter_function();
@@ -181,11 +182,11 @@ static int ssh_connect_ai_timeout(ssh_session session, const char *host,
leave_function();
return -1;
}
- rc = 0;
+ rc = -1;
/* Get connect(2) return code. Zero means no error */
- getsockopt(s, SOL_SOCKET, SO_ERROR,(char *) &rc, &len);
- if (rc != 0) {
+ ret = getsockopt(s, SOL_SOCKET, SO_ERROR,(char *) &rc, &len);
+ if (ret < 0 || rc != 0) {
ssh_set_error(session, SSH_FATAL,
"Connect to %s:%d failed: %s", host, port, strerror(rc));
ssh_connect_socket_close(s);