@@ -40,12 +40,11 @@ static bool MUTEX_TRY_LOCK( MUTEX_TYPE& x )
40
40
int EHSServer::CreateFdSet ( )
41
41
{
42
42
MUTEX_LOCK ( m_oMutex );
43
- // don't lock mutex, as it is only called from within a locked section
44
43
45
- FD_ZERO ( & m_oReadFds );
44
+ m_oReadFds. Reset ( );
46
45
47
46
// add the accepting FD
48
- FD_SET ( m_poNetworkAbstraction->GetFd ( ), &m_oReadFds );
47
+ m_oReadFds. Add ( m_poNetworkAbstraction->GetFd ( ), POLLIN );
49
48
50
49
int nHighestFd = m_poNetworkAbstraction->GetFd ( );
51
50
@@ -61,7 +60,7 @@ int EHSServer::CreateFdSet ( )
61
60
62
61
EHS_TRACE ( " Adding %d to FD SET\n " , nCurrentFd );
63
62
64
- FD_SET ( nCurrentFd, &m_oReadFds );
63
+ m_oReadFds. Add ( nCurrentFd, POLLIN );
65
64
66
65
// store the highest FD in the set to return it
67
66
if ( nCurrentFd > nHighestFd ) {
@@ -889,22 +888,9 @@ void EHSServer::HandleData ( int inTimeoutMilliseconds, ///< milliseconds for ti
889
888
890
889
MUTEX_UNLOCK ( m_oMutex );
891
890
892
- // set up the timeout and normalize
893
- timeval tv = { 0 , inTimeoutMilliseconds * 1000 };
894
- tv.tv_sec = tv.tv_usec / 1000000 ;
895
- tv.tv_usec %= 1000000 ;
896
-
897
- // create the FD set for select
898
- int nHighestFd = CreateFdSet ( );
899
-
900
- // call select
901
- // fprintf ( stderr, "##### [%d] Calling select\n", inThreadId );
902
- int nSocketCount = select ( nHighestFd + 1 ,
903
- &m_oReadFds,
904
- NULL ,
905
- NULL ,
906
- &tv );
907
- // fprintf ( stderr, "##### [%d] Done calling select\n", inThreadId );
891
+ // create the FD set for poll
892
+ CreateFdSet ();
893
+ int nSocketCount = poll ( m_oReadFds.GetFdArray (), m_oReadFds.GetFdCount (), inTimeoutMilliseconds );
908
894
909
895
// handle select error
910
896
#ifdef _WIN32
@@ -971,7 +957,7 @@ void EHSServer::CheckAcceptSocket ( )
971
957
{
972
958
973
959
// see if we got data on this socket
974
- if ( FD_ISSET ( m_poNetworkAbstraction->GetFd ( ), &m_oReadFds ) ) {
960
+ if ( m_oReadFds. IsSet ( m_poNetworkAbstraction->GetFd ( ), POLLIN ) ) {
975
961
976
962
977
963
// printf ( "Accept new connection\n");
@@ -1031,7 +1017,7 @@ void EHSServer::CheckClientSockets ( )
1031
1017
i != m_oEHSConnectionList.end ( );
1032
1018
i++ ) {
1033
1019
1034
- if ( FD_ISSET ( (*i)->GetNetworkAbstraction ( )->GetFd ( ), &m_oReadFds ) ) {
1020
+ if ( m_oReadFds. IsSet ( (*i)->GetNetworkAbstraction ( )->GetFd ( ), POLLIN ) ) {
1035
1021
1036
1022
if ( MUTEX_TRY_LOCK ( (*i)->m_oConnectionMutex ) == false )
1037
1023
continue ;
0 commit comments