void Socket::recv( char * buf , int len ) { while( len > 0 ) { int ret = -1; if (MONGO_FAIL_POINT(throwSockExcep)) { #if defined(_WIN32) WSASetLastError(WSAENETUNREACH); #else errno = ENETUNREACH; #endif if (ret <= 0) { handleRecvError(ret, len); continue; } } else { ret = unsafe_recv(buf, len); } if ( len <= 4 && ret != len ) { LOG(_logLevel) << "Socket recv() got " << ret << " bytes wanted len=" << len << endl; } fassert(16508, ret <= len); len -= ret; buf += ret; } }
// throws if SSL_read fails or recv returns an error int Socket::_recv( char *buf, int max ) { #ifdef MONGO_CONFIG_SSL if ( _sslConnection.get() ){ return _sslManager->SSL_read( _sslConnection.get() , buf , max ); } #endif int ret = ::recv( _fd , buf , max , portRecvFlags ); if (ret <= 0) { handleRecvError(ret, max); // If no throw return and call _recv again return 0; } return ret; }
void Socket::recv(char* buf, int len) { while (len > 0) { int ret = -1; if (MONGO_FAIL_POINT(throwSockExcep)) { #if defined(_WIN32) WSASetLastError(WSAENETUNREACH); #else errno = ENETUNREACH; #endif if (ret <= 0) { handleRecvError(ret, len); continue; } } else { ret = unsafe_recv(buf, len); } fassert(16508, ret <= len); len -= ret; buf += ret; } }