99 void Server::Run( void ) {
100 long currLen;
101 max_size_t totLen = 0;
102 struct UDP_datagram* mBuf_UDP = (struct UDP_datagram*) mBuf;
103
104 ReportStruct *reportstruct = NULL;
105
106 reportstruct = new ReportStruct;
107 if ( reportstruct != NULL ) {
108 reportstruct->packetID = 0;
109 mSettings->reporthdr = InitReport( mSettings );
110 do {
111 // perform read
112 currLen = recv( mSettings->mSock, mBuf, mSettings->mBufLen, 0 );
totLen += currLen;
142 } while ( currLen > 0 );
145 // stop timing
146 gettimeofday( &(reportstruct->packetTime), NULL );
147
148 if ( !isUDP (mSettings)) {
149 if(0.0 == mSettings->mInterval) {
150 reportstruct->packetLen = totLen;
151 }
152 ReportPacket( mSettings->reporthdr, reportstruct );
153 }
154 CloseReport( mSettings->reporthdr, reportstruct );
160 }
161 } else {
162 FAIL(1, "Out of memory! Closing server thread\n", mSettings);
163 }
164
165 Mutex_Lock( &clients_mutex );
166 Iperf_delete( &(mSettings->peer), &clients );
167 Mutex_Unlock( &clients_mutex );
168
169 DELETE_PTR( reportstruct );
170 EndReport( mSettings->reporthdr );
171 }