Implement socket read without exit check.

This commit is contained in:
Bartosz Taudul 2020-04-13 14:22:58 +02:00
parent e4ec666479
commit 1bbece649f
3 changed files with 15 additions and 5 deletions

View File

@ -2313,17 +2313,15 @@ void Profiler::SendCallstackFrame( uint64_t ptr )
}
static bool DontExit() { return false; }
bool Profiler::HandleServerQuery()
{
uint8_t type;
uint64_t ptr;
uint32_t extra;
if( !m_sock->Read( &type, sizeof( type ), 10, DontExit ) ) return false;
if( !m_sock->Read( &ptr, sizeof( ptr ), 10, DontExit ) ) return false;
if( !m_sock->Read( &extra, sizeof( extra ), 10, DontExit ) ) return false;
if( !m_sock->Read( &type, sizeof( type ), 10 ) ) return false;
if( !m_sock->Read( &ptr, sizeof( ptr ), 10 ) ) return false;
if( !m_sock->Read( &extra, sizeof( extra ), 10 ) ) return false;
switch( type )
{

View File

@ -221,6 +221,16 @@ int Socket::Recv( void* _buf, int len, int timeout )
}
}
bool Socket::Read( void* buf, int len, int timeout )
{
auto cbuf = (char*)buf;
while( len > 0 )
{
if( !ReadImpl( cbuf, len, timeout ) ) return false;
}
return true;
}
bool Socket::ReadImpl( char*& buf, int& len, int timeout )
{
const auto sz = RecvBuffered( buf, len, timeout );

View File

@ -27,6 +27,8 @@ public:
int Send( const void* buf, int len );
int GetSendBufSize();
bool Read( void* buf, int len, int timeout );
template<typename ShouldExit>
bool Read( void* buf, int len, int timeout, ShouldExit exitCb )
{