aboutsummaryrefslogtreecommitdiff
path: root/libssh
diff options
context:
space:
mode:
authorAris Adamantiadis <aris@0xbadc0de.be>2010-01-08 23:28:55 +0100
committerAris Adamantiadis <aris@0xbadc0de.be>2010-01-08 23:28:55 +0100
commita2505078da0f81392b5b2db7bf1363c69c372535 (patch)
tree3ee7cff673ccfc9a8b23fed98244ec612335e93a /libssh
parent35532a63fe3dabf70f574dae19c91c3ac0cc479e (diff)
downloadlibssh-a2505078da0f81392b5b2db7bf1363c69c372535.tar.gz
libssh-a2505078da0f81392b5b2db7bf1363c69c372535.tar.xz
libssh-a2505078da0f81392b5b2db7bf1363c69c372535.zip
Set socket blocking after connexion
Diffstat (limited to 'libssh')
-rw-r--r--libssh/connect.c14
-rw-r--r--libssh/socket.c1
2 files changed, 8 insertions, 7 deletions
diff --git a/libssh/connect.c b/libssh/connect.c
index 896bcf0b..05e8b766 100644
--- a/libssh/connect.c
+++ b/libssh/connect.c
@@ -85,12 +85,12 @@
#endif /* HAVE_REGCOMP */
#ifdef _WIN32
-static void sock_set_nonblocking(socket_t sock) {
+static void ssh_sock_set_nonblocking(socket_t sock) {
u_long nonblocking = 1;
ioctlsocket(sock, FIONBIO, &nonblocking);
}
-static void sock_set_blocking(socket_t sock) {
+static void ssh_sock_set_blocking(socket_t sock) {
u_long nonblocking = 0;
ioctlsocket(sock, FIONBIO, &nonblocking);
}
@@ -106,11 +106,11 @@ char WSAAPI *gai_strerrorA(int code) {
#endif /* gai_strerror */
#else /* _WIN32 */
-static void sock_set_nonblocking(socket_t sock) {
+void ssh_sock_set_nonblocking(socket_t sock) {
fcntl(sock, F_SETFL, O_NONBLOCK);
}
-static void sock_set_blocking(socket_t sock) {
+void ssh_sock_set_blocking(socket_t sock) {
fcntl(sock, F_SETFL, 0);
}
@@ -212,7 +212,7 @@ static int ssh_connect_ai_timeout(ssh_session session, const char *host,
to.tv_sec = timeout;
to.tv_usec = usec;
- sock_set_nonblocking(s);
+ ssh_sock_set_nonblocking(s);
ssh_log(session, SSH_LOG_RARE, "Trying to connect to host: %s:%d with "
"timeout %ld.%ld", host, port, timeout, usec);
@@ -255,7 +255,7 @@ static int ssh_connect_ai_timeout(ssh_session session, const char *host,
/* s is connected ? */
ssh_log(session, SSH_LOG_PACKET, "Socket connected with timeout\n");
- sock_set_blocking(s);
+ ssh_sock_set_blocking(s);
leave_function();
return s;
@@ -425,7 +425,7 @@ socket_t ssh_connect_host_nonblocking(ssh_session session, const char *host,
continue;
}
}
- sock_set_nonblocking(s);
+ ssh_sock_set_nonblocking(s);
connect(s, itr->ai_addr, itr->ai_addrlen);
break;
diff --git a/libssh/socket.c b/libssh/socket.c
index b14b2741..96f29cb0 100644
--- a/libssh/socket.c
+++ b/libssh/socket.c
@@ -194,6 +194,7 @@ int ssh_socket_pollcallback(ssh_poll_handle p, int fd, int revents, void *v_s){
ssh_log(s->session,SSH_LOG_PACKET,"Received POLLOUT in connecting state");
s->state = SSH_SOCKET_CONNECTED;
ssh_poll_set_events(p,POLLOUT | POLLIN | POLLERR);
+ ssh_sock_set_blocking(ssh_socket_get_fd(s));
if(s->callbacks && s->callbacks->connected)
s->callbacks->connected(SSH_SOCKET_CONNECTED_OK,0,s->callbacks->userdata);
return 0;