1
1

Add a function to close the socket.

This fixes ssh_connect on Windows.
Этот коммит содержится в:
Andreas Schneider 2009-07-27 14:19:06 +02:00
родитель 1dcaebe1ce
Коммит 9b97da65e6

Просмотреть файл

@ -139,6 +139,16 @@ void ssh_regex_finalize(){
}
#endif
static int ssh_connect_socket_close(socket_t s){
#ifdef _WIN32
return closesocket(s);
#else
return close(s);
#endif
}
static int getai(SSH_SESSION *session, const char *host, int port, struct addrinfo **ai) {
const char *service = NULL;
struct addrinfo hints;
@ -195,7 +205,7 @@ static int ssh_connect_ai_timeout(SSH_SESSION *session, const char *host,
/* timeout */
ssh_set_error(session, SSH_FATAL,
"Timeout while connecting to %s:%d", host, port);
close(s);
ssh_connect_socket_close(s);
leave_function();
return -1;
}
@ -203,7 +213,7 @@ static int ssh_connect_ai_timeout(SSH_SESSION *session, const char *host,
if (rc < 0) {
ssh_set_error(session, SSH_FATAL,
"Select error: %s", strerror(errno));
close(s);
ssh_connect_socket_close(s);
leave_function();
return -1;
}
@ -214,7 +224,7 @@ static int ssh_connect_ai_timeout(SSH_SESSION *session, const char *host,
if (rc != 0) {
ssh_set_error(session, SSH_FATAL,
"Connect to %s:%d failed: %s", host, port, strerror(rc));
close(s);
ssh_connect_socket_close(s);
leave_function();
return -1;
}
@ -290,7 +300,7 @@ socket_t ssh_connect_host(SSH_SESSION *session, const char *host,
/* Cannot bind to any local addresses */
if (bind_itr == NULL) {
close(s);
ssh_connect_socket_close(s);
s = -1;
continue;
}
@ -305,7 +315,7 @@ socket_t ssh_connect_host(SSH_SESSION *session, const char *host,
if (connect(s, itr->ai_addr, itr->ai_addrlen) < 0) {
ssh_set_error(session, SSH_FATAL, "Connect failed: %s", strerror(errno));
close(s);
ssh_connect_socket_close(s);
s = -1;
leave_function();
continue;