@ -260,37 +260,7 @@ rfbCheckFds(rfbScreenInfoPtr rfbScreen,long usec)
if ( rfbScreen - > listenSock ! = - 1 & & FD_ISSET ( rfbScreen - > listenSock , & fds ) ) {
if ( rfbScreen - > listenSock ! = - 1 & & FD_ISSET ( rfbScreen - > listenSock , & fds ) ) {
if ( ( sock = accept ( rfbScreen - > listenSock ,
rfbProcessNewConnection ( rfbScreen ) ;
( struct sockaddr * ) & addr , & addrlen ) ) < 0 ) {
rfbLogPerror ( " rfbCheckFds: accept " ) ;
return - 1 ;
}
if ( ! rfbSetNonBlocking ( sock ) ) {
closesocket ( sock ) ;
return - 1 ;
}
if ( setsockopt ( sock , IPPROTO_TCP , TCP_NODELAY ,
( char * ) & one , sizeof ( one ) ) < 0 ) {
rfbLogPerror ( " rfbCheckFds: setsockopt " ) ;
closesocket ( sock ) ;
return - 1 ;
}
# ifdef USE_LIBWRAP
if ( ! hosts_ctl ( " vnc " , STRING_UNKNOWN , inet_ntoa ( addr . sin_addr ) ,
STRING_UNKNOWN ) ) {
rfbLog ( " Rejected connection from client %s \n " ,
inet_ntoa ( addr . sin_addr ) ) ;
closesocket ( sock ) ;
return - 1 ;
}
# endif
rfbLog ( " Got connection from client %s \n " , inet_ntoa ( addr . sin_addr ) ) ;
rfbNewClient ( rfbScreen , sock ) ;
FD_CLR ( rfbScreen - > listenSock , & fds ) ;
FD_CLR ( rfbScreen - > listenSock , & fds ) ;
if ( - - nfds = = 0 )
if ( - - nfds = = 0 )
@ -352,6 +322,47 @@ rfbCheckFds(rfbScreenInfoPtr rfbScreen,long usec)
return result ;
return result ;
}
}
void
rfbProcessNewConnection ( rfbScreenInfoPtr rfbScreen )
{
const int one = 1 ;
int sock = - 1 ;
struct sockaddr_in addr ;
socklen_t addrlen = sizeof ( addr ) ;
if ( ( sock = accept ( rfbScreen - > listenSock ,
( struct sockaddr * ) & addr , & addrlen ) ) < 0 ) {
rfbLogPerror ( " rfbCheckFds: accept " ) ;
return - 1 ;
}
if ( ! rfbSetNonBlocking ( sock ) ) {
closesocket ( sock ) ;
return - 1 ;
}
if ( setsockopt ( sock , IPPROTO_TCP , TCP_NODELAY ,
( char * ) & one , sizeof ( one ) ) < 0 ) {
rfbLogPerror ( " rfbCheckFds: setsockopt " ) ;
closesocket ( sock ) ;
return - 1 ;
}
# ifdef USE_LIBWRAP
if ( ! hosts_ctl ( " vnc " , STRING_UNKNOWN , inet_ntoa ( addr . sin_addr ) ,
STRING_UNKNOWN ) ) {
rfbLog ( " Rejected connection from client %s \n " ,
inet_ntoa ( addr . sin_addr ) ) ;
closesocket ( sock ) ;
return - 1 ;
}
# endif
rfbLog ( " Got connection from client %s \n " , inet_ntoa ( addr . sin_addr ) ) ;
rfbNewClient ( rfbScreen , sock ) ;
}
void
void
rfbDisconnectUDPSock ( rfbScreenInfoPtr rfbScreen )
rfbDisconnectUDPSock ( rfbScreenInfoPtr rfbScreen )