64 VsnetSocket( sock, remote_ip,
"VsnetTCPSocket", sets )
65 , _incomplete_packet( 0 )
66 , _incomplete_header( 0 )
67 , _connection_closed( false )
69 , _mtu_size_estimation( 1024 )
71 COUT<<
"enter "<<__PRETTY_FUNCTION__<<endl;
77 COUT<<
"enter "<<__PRETTY_FUNCTION__<<endl;
107 if (pcktflags&
LOPRI) idx = 0;
108 if (pcktflags&
HIPRI) idx = 2;
138 <<(
_sq.
empty() ?
"empty" :
"not empty")
140 <<(
_sq_current.empty() ?
"empty" :
"not empty")<<endl;
153 return _mtu_size_estimation;
170 COUT<<
"both queues are empty"<<endl;
176 int len = m->getSendBufferLength();
186 unsigned int len = packet.
len();
189 const char *buf = packet.getConstBuf();
194 #if defined (_WIN32) && !defined (__CYGWIN__)
196 case WSAECONNABORTED:
210 <<
" *** An invalid user space address was specified for a parameter."<<endl
211 <<
" *** fd : "<<
_sq_fd<<endl
212 <<
" *** buf : "<<std::hex<<(long) buf<<std::dec<<endl
213 <<
" *** sq offset : "<<_sq_off<<endl
214 <<
" *** packet len: "<<packet.len()<<endl;
218 fprintf( stderr,
"Failed sending TCP data of %d len to socket %d\n", len,
_sq_fd );
219 perror(
"\tsending TCP data" );
223 }
else if (numsent == 0) {
227 }
else if ( (
unsigned int) numsent == len ) {
236 COUT<<
"sent buffer with len "<<packet.len()<<
": "<<endl;
238 packet.dump( cout, 0 );
244 assert( (
unsigned int) numsent < len );
257 COUT<<
"forgetting a packet in _sq"<<endl;
263 COUT<<
"forgetting a segment in _sq_current"<<endl;
273 if (
_cpq.empty() ==
false) {
281 return ptr->getDataLength()+ptr->getHeaderLength();
286 COUT<<__PRETTY_FUNCTION__<<
" connection is closed"<<endl;
299 COUT<<s<<
" :\tWarning: disconnect error: "<<strerror( errno )<<endl;
301 COUT<<s<<
" :\tWarning: disconnected"<<endl;
303 COUT<<s<<
" :\tWarning: disconnect null socket: "<<strerror( errno )<<endl;
332 if (
_cpq.empty() ==
false)
346 COUT<<
"Connection already closed"<<endl;
350 bool successful =
false;
351 if (
get_nonblock() ==
false && datalen == -1) endless =
false;
362 COUT<<
"Connection closed in header"<<endl;
368 COUT<<
"recv returned "<<ret
372 perror(
"receiving TCP packetlength bytes" );
381 assert( (
unsigned int)ret <= len );
382 if (ret > 0) _incomplete_header += ret;
383 if (datalen != -1) datalen -= ret;
384 if ( _incomplete_header ==
sizeof (
Header) ) {
385 _incomplete_header = 0;
393 len = datalen < len ? datalen : len;
395 assert( ret <= len );
398 COUT<<
"Connection closed in data"<<endl;
404 perror(
"receiving TCP packet" );
406 perror(
"receiving dead TCP packet" );
408 COUT<<
"Connection closed in error"<<endl;
417 COUT<<
"Received EWOULDBLOCK in data."<<(
get_nonblock() ?
"true" :
"false")<<endl;
502 std::map< int, SqQueue >::iterator it;
504 if ( it == _q.end() )
return 0;
505 return it->second.size();
515 std::map< int, SqQueue >::reverse_iterator it;
516 for (it = _q.rbegin(); it != _q.rend(); it++)
517 if (it->second.empty() ==
false) {