fixed 1st argument to select

This commit is contained in:
Jeff Hill
2003-01-23 22:55:27 +00:00
parent ca661479f8
commit 21058eed94
3 changed files with 13 additions and 11 deletions

View File

@@ -1619,26 +1619,24 @@ void cac::waitUntilNoRecvThreadsPending ()
{
fd_set mask;
FD_ZERO ( & mask );
int count = 0;
SOCKET maxFD = 0;
epicsGuard < cacMutex > guard ( this->mutex );
tsDLIter < tcpiiu > iter = this->serverList.firstIter ();
if ( this->pudpiiu ) {
this->pudpiiu->fdMaskSet ( mask );
count++;
this->pudpiiu->fdMaskSet ( mask, maxFD );
}
while ( iter.valid() ) {
iter->fdMaskSet ( mask );
count++;
iter->fdMaskSet ( mask, maxFD );
iter++;
}
struct timeval delay = { 0, 0 };
int status = select ( count, & mask, 0, 0, & delay );
int status = select ( maxFD+1, & mask, 0, 0, & delay );
if ( status <= 0 ) {
return;
}
this->nRecvThreadsPending =
static_cast < unsigned > ( count );
static_cast < unsigned > ( status );
}
this->recvThreadActivityComplete.wait ( 0.1 );

View File

@@ -36,6 +36,7 @@
#include "epicsThread.h"
#include "epicsMemory.h"
#include "epicsTime.h"
#include "tsMinMax.h"
#ifdef udpiiuh_accessh_epicsExportSharedSymbols
# define epicsExportSharedSymbols
@@ -98,7 +99,7 @@ public:
bool pushDatagramMsg ( const caHdr &hdr, const void *pExt, ca_uint16_t extsize);
void shutdown ();
double roundTripDelayEstimate () const;
void fdMaskSet ( fd_set & mask ) const;
void fdMaskSet ( fd_set & mask, SOCKET & maxFD ) const;
// exceptions
class noSocket {};
@@ -222,8 +223,9 @@ inline double udpiiu::roundTripDelayEstimate () const
return this->rtteMean;
}
inline void udpiiu::fdMaskSet ( fd_set & mask ) const
inline void udpiiu::fdMaskSet ( fd_set & mask, SOCKET & maxFD ) const
{
maxFD = tsMax ( this->sock, maxFD );
FD_SET ( this->sock, & mask );
}

View File

@@ -28,6 +28,7 @@
#include "epicsMemory.h"
#include "tsDLList.h"
#include "tsMinMax.h"
#include "comBuf.h"
#include "caServerID.h"
@@ -133,7 +134,7 @@ public:
bool bytesArePendingInOS () const;
void fdMaskSet ( fd_set & ) const;
void fdMaskSet ( fd_set &, SOCKET & maxFd ) const;
private:
hostNameCache hostNameCacheInstance;
@@ -249,8 +250,9 @@ inline unsigned tcpiiu::channelCount ()
return this->channelList.count ();
}
inline void tcpiiu::fdMaskSet ( fd_set & mask ) const
inline void tcpiiu::fdMaskSet ( fd_set & mask, SOCKET & maxFD ) const
{
maxFD = tsMax ( this->sock, maxFD );
FD_SET ( this->sock, & mask );
}