diff options
Diffstat (limited to 'src/socket.c')
-rw-r--r-- | src/socket.c | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/src/socket.c b/src/socket.c index a4a16b13..5bde8365 100644 --- a/src/socket.c +++ b/src/socket.c @@ -300,7 +300,7 @@ int ssh_socket_pollcallback(struct ssh_poll_handle_struct *p, socket_t fd, int r ssh_log(s->session,SSH_LOG_PACKET,"Received POLLOUT in connecting state"); s->state = SSH_SOCKET_CONNECTED; ssh_poll_set_events(p,POLLOUT | POLLIN); - ssh_sock_set_blocking(ssh_socket_get_fd_in(s)); + ssh_socket_set_blocking(ssh_socket_get_fd_in(s)); if(s->callbacks && s->callbacks->connected) s->callbacks->connected(SSH_SOCKET_CONNECTED_OK,0,s->callbacks->userdata); return 0; @@ -701,6 +701,27 @@ int ssh_socket_get_status(ssh_socket s) { return r; } +#ifdef _WIN32 +void ssh_socket_set_nonblocking(socket_t fd) { + u_long nonblocking = 1; + ioctlsocket(fd, FIONBIO, &nonblocking); +} + +void ssh_socket_set_blocking(socket_t fd) { + u_long nonblocking = 0; + ioctlsocket(fd, FIONBIO, &nonblocking); +} + +#else /* _WIN32 */ +void ssh_socket_set_nonblocking(socket_t fd) { + fcntl(fd, F_SETFL, O_NONBLOCK); +} + +void ssh_socket_set_blocking(socket_t fd) { + fcntl(fd, F_SETFL, 0); +} +#endif /* _WIN32 */ + /** * @internal * @brief Launches a socket connection |