mirror of
				https://github.com/libssh2/libssh2.git
				synced 2025-10-30 12:05:34 +03:00 
			
		
		
		
	less code duplication in the poll vs select code flows
libssh2_keepalive_send and libssh2_session_block_directions are now used outside of the #ifdef blocks.
This commit is contained in:
		| @@ -519,59 +519,53 @@ int _libssh2_wait_socket(LIBSSH2_SESSION *session) | |||||||
| { | { | ||||||
|     int rc; |     int rc; | ||||||
|     int dir; |     int dir; | ||||||
| #if HAVE_POLL |  | ||||||
|     struct pollfd sockets[1]; |  | ||||||
|     int seconds_to_next; |  | ||||||
|  |  | ||||||
|     rc = libssh2_keepalive_send (session, &seconds_to_next); |  | ||||||
|     if (rc < 0) |  | ||||||
|       return rc; |  | ||||||
|  |  | ||||||
|     sockets[0].fd = session->socket_fd; |  | ||||||
|     sockets[0].events = 0; |  | ||||||
|     sockets[0].revents = 0; |  | ||||||
|  |  | ||||||
| /* now make sure we wait in the correct direction */ |  | ||||||
|     dir = libssh2_session_block_directions(session); |  | ||||||
|  |  | ||||||
|     if(dir & LIBSSH2_SESSION_BLOCK_INBOUND) |  | ||||||
|         sockets[0].events |= POLLIN; |  | ||||||
|  |  | ||||||
|     if(dir & LIBSSH2_SESSION_BLOCK_OUTBOUND) |  | ||||||
|         sockets[0].events |= POLLOUT; |  | ||||||
|  |  | ||||||
|     rc = poll(sockets, 1, seconds_to_next ? seconds_to_next / 1000 : -1); |  | ||||||
| #else |  | ||||||
|     fd_set fd; |  | ||||||
|     fd_set *writefd = NULL; |  | ||||||
|     fd_set *readfd = NULL; |  | ||||||
|     struct timeval tv; |  | ||||||
|     int seconds_to_next; |     int seconds_to_next; | ||||||
|  |  | ||||||
|     rc = libssh2_keepalive_send (session, &seconds_to_next); |     rc = libssh2_keepalive_send (session, &seconds_to_next); | ||||||
|     if (rc < 0) |     if (rc < 0) | ||||||
|         return rc; |         return rc; | ||||||
|  |     else { | ||||||
|  |         /* figure out what to wait for */ | ||||||
|  |         dir = libssh2_session_block_directions(session); | ||||||
|  |  | ||||||
|     tv.tv_sec = seconds_to_next; | #ifdef HAVE_POLL | ||||||
|     tv.tv_usec = 0; |         struct pollfd sockets[1]; | ||||||
|  |  | ||||||
|     FD_ZERO(&fd); |         sockets[0].fd = session->socket_fd; | ||||||
|     FD_SET(session->socket_fd, &fd); |         sockets[0].events = 0; | ||||||
|  |         sockets[0].revents = 0; | ||||||
|  |  | ||||||
|     /* now make sure we wait in the correct direction */ |         if(dir & LIBSSH2_SESSION_BLOCK_INBOUND) | ||||||
|     dir = libssh2_session_block_directions(session); |             sockets[0].events |= POLLIN; | ||||||
|  |  | ||||||
|     if(dir & LIBSSH2_SESSION_BLOCK_INBOUND) |         if(dir & LIBSSH2_SESSION_BLOCK_OUTBOUND) | ||||||
|         readfd = &fd; |             sockets[0].events |= POLLOUT; | ||||||
|  |  | ||||||
|     if(dir & LIBSSH2_SESSION_BLOCK_OUTBOUND) |         rc = poll(sockets, 1, seconds_to_next ? seconds_to_next / 1000 : -1); | ||||||
|         writefd = &fd; | #else | ||||||
|  |         fd_set fd; | ||||||
|  |         fd_set *writefd = NULL; | ||||||
|  |         fd_set *readfd = NULL; | ||||||
|  |         struct timeval tv; | ||||||
|  |  | ||||||
|     /* Note that this COULD be made to use a timeout that perhaps could be |         tv.tv_sec = seconds_to_next; | ||||||
|        customizable by the app or something... */ |         tv.tv_usec = 0; | ||||||
|     rc = select(session->socket_fd + 1, readfd, writefd, NULL, |  | ||||||
|                 seconds_to_next ? &tv : NULL); |         FD_ZERO(&fd); | ||||||
|  |         FD_SET(session->socket_fd, &fd); | ||||||
|  |  | ||||||
|  |         if(dir & LIBSSH2_SESSION_BLOCK_INBOUND) | ||||||
|  |             readfd = &fd; | ||||||
|  |  | ||||||
|  |         if(dir & LIBSSH2_SESSION_BLOCK_OUTBOUND) | ||||||
|  |             writefd = &fd; | ||||||
|  |  | ||||||
|  |         /* Note that this COULD be made to use a timeout that perhaps could be | ||||||
|  |            customizable by the app or something... */ | ||||||
|  |         rc = select(session->socket_fd + 1, readfd, writefd, NULL, | ||||||
|  |                     seconds_to_next ? &tv : NULL); | ||||||
| #endif | #endif | ||||||
|  |     } | ||||||
|  |  | ||||||
|     if(rc <= 0) { |     if(rc <= 0) { | ||||||
|         /* timeout (or error), bail out with a timeout error */ |         /* timeout (or error), bail out with a timeout error */ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user