diff options
author | Werner Koch <wk@gnupg.org> | 2012-09-20 13:17:52 +0200 |
---|---|---|
committer | Andreas Schneider <asn@cryptomilk.org> | 2012-09-21 09:41:47 +0200 |
commit | 0e833d75e604876367376e5ded6c043073e9aad5 (patch) | |
tree | 8fd6e528782888c7be298b9291a835e1cc225249 /src/socket.c | |
parent | ae83f775116b012727bc977a03ee8803627859aa (diff) | |
download | libssh-0e833d75e604876367376e5ded6c043073e9aad5.tar.gz libssh-0e833d75e604876367376e5ded6c043073e9aad5.tar.xz libssh-0e833d75e604876367376e5ded6c043073e9aad5.zip |
Fix regression in pre-connected socket setting.
* src/socket.c (ssh_socket_pollcallback): Factor some code out to ...
(ssh_socket_set_connecting): New.
* include/libssh/socket.h (ssh_socket_set_connecting): Add prototype.
* src/client.c (ssh_connect): Use new function for a socket set by
SSH_OPTIONS_FD.
Signed-off-by: Werner Koch <wk@gnupg.org>
Signed-off-by: Andreas Schneider <asn@cryptomilk.org>
Diffstat (limited to 'src/socket.c')
-rw-r--r-- | src/socket.c | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/src/socket.c b/src/socket.c index 062739ae..7eb080f9 100644 --- a/src/socket.c +++ b/src/socket.c @@ -701,6 +701,25 @@ int ssh_socket_get_status(ssh_socket s) { return r; } + +/** + * @internal + * @brief Set a socket into the connecting state + * @param s socket handle + * @param fd file descriptor + */ + +void ssh_socket_set_connecting(ssh_socket s, int fd){ + ssh_socket_set_fd(s,fd); + s->state=SSH_SOCKET_CONNECTING; + /* POLLOUT is the event to wait for in a nonblocking connect */ + ssh_poll_set_events(ssh_socket_get_poll_handle_in(s),POLLOUT); +#ifdef _WIN32 + ssh_poll_add_events(ssh_socket_get_poll_handle_in(s),POLLWRNORM); +#endif +} + + /** * @internal * @brief Launches a socket connection @@ -729,13 +748,7 @@ int ssh_socket_connect(ssh_socket s, const char *host, int port, const char *bin ssh_log(session,SSH_LOG_PROTOCOL,"Nonblocking connection socket: %d",fd); if(fd == SSH_INVALID_SOCKET) return SSH_ERROR; - ssh_socket_set_fd(s,fd); - s->state=SSH_SOCKET_CONNECTING; - /* POLLOUT is the event to wait for in a nonblocking connect */ - ssh_poll_set_events(ssh_socket_get_poll_handle_in(s),POLLOUT); -#ifdef _WIN32 - ssh_poll_add_events(ssh_socket_get_poll_handle_in(s),POLLWRNORM); -#endif + ssh_socket_set_connecting(s,fd); leave_function(); return SSH_OK; } |