static int transfer(SSL *ssl, int sock_fd) /* transfer data */ { fd_set rd_set, wr_set; int num, fdno, ssl_fd, ssl_bytes, sock_bytes, retval; char sock_buff[BUFFSIZE], ssl_buff[BUFFSIZE]; int sock_ptr, ssl_ptr, sock_open, ssl_open; #if defined FIONBIO && defined USE_NBIO unsigned long l; #endif int check_SSL_pending; ssl_fd=SSL_get_fd(ssl); fdno=(ssl_fd>sock_fd ? ssl_fd : sock_fd)+1; sock_ptr=0; ssl_ptr=0; sock_open=1; ssl_open=1; sock_bytes=0; ssl_bytes=0; #if defined FIONBIO && defined USE_NBIO l=1; /* ON */ if(ioctlsocket(sock_fd, FIONBIO, &l)<0) sockerror("ioctlsocket (sock)"); /* non-critical */ if(ioctlsocket(ssl_fd, FIONBIO, &l)<0) sockerror("ioctlsocket (ssl)"); /* non-critical */ log(LOG_DEBUG, "Sockets set to non-blocking mode"); #endif while((sock_open||sock_ptr) && (ssl_open||ssl_ptr)) { FD_ZERO(&rd_set); if(sock_open && sock_ptr 0) { sock_ptr += num; } else { /* close */ log(LOG_DEBUG, "Socket closed on read"); sock_open = 0; } } if( ssl_open && (ssl_ptr