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:
parent
a2187565d1
commit
e4ec666479
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user