1
0
mirror of https://github.com/wolfpld/tracy synced 2025-04-29 12:23:53 +00:00

Don't use std::function in sockets.

This commit is contained in:
Bartosz Taudul 2020-04-13 14:14:36 +02:00
parent a2187565d1
commit e4ec666479
2 changed files with 33 additions and 25 deletions

View File

@ -221,33 +221,26 @@ int Socket::Recv( void* _buf, int len, int timeout )
} }
} }
bool Socket::Read( void* _buf, int len, int timeout, std::function<bool()> exitCb ) bool Socket::ReadImpl( char*& buf, int& len, int timeout )
{ {
auto buf = (char*)_buf; const auto sz = RecvBuffered( buf, len, timeout );
switch( sz )
while( len > 0 )
{ {
if( exitCb() ) return false; case 0:
const auto sz = RecvBuffered( buf, len, timeout ); return false;
switch( sz ) case -1:
{
case 0:
return false;
case -1:
#ifdef _WIN32 #ifdef _WIN32
{ {
auto err = WSAGetLastError(); auto err = WSAGetLastError();
if( err == WSAECONNABORTED || err == WSAECONNRESET ) return false; if( err == WSAECONNABORTED || err == WSAECONNRESET ) return false;
} }
#endif #endif
break; break;
default: default:
len -= sz; len -= sz;
buf += sz; buf += sz;
break; break;
}
} }
return true; return true;
} }

View File

@ -1,7 +1,9 @@
#ifndef __TRACYSOCKET_HPP__ #ifndef __TRACYSOCKET_HPP__
#define __TRACYSOCKET_HPP__ #define __TRACYSOCKET_HPP__
#include <functional> #include <stdint.h>
#include "TracyForceInline.hpp"
struct sockaddr; struct sockaddr;
@ -25,7 +27,18 @@ public:
int Send( const void* buf, int len ); int Send( const void* buf, int len );
int GetSendBufSize(); int GetSendBufSize();
bool Read( void* buf, int len, int timeout, std::function<bool()> exitCb ); template<typename ShouldExit>
bool Read( void* buf, int len, int timeout, ShouldExit exitCb )
{
auto cbuf = (char*)buf;
while( len > 0 )
{
if( exitCb() ) return false;
if( !ReadImpl( cbuf, len, timeout ) ) return false;
}
return true;
}
bool ReadRaw( void* buf, int len, int timeout ); bool ReadRaw( void* buf, int len, int timeout );
bool HasData(); bool HasData();
bool IsValid() const; bool IsValid() const;
@ -39,6 +52,8 @@ private:
int RecvBuffered( void* buf, int len, int timeout ); int RecvBuffered( void* buf, int len, int timeout );
int Recv( void* buf, int len, int timeout ); int Recv( void* buf, int len, int timeout );
bool ReadImpl( char*& buf, int& len, int timeout );
char* m_buf; char* m_buf;
char* m_bufPtr; char* m_bufPtr;
int m_sock; int m_sock;