Callback recursion: stack overflow
Okay, so I've got a socket class:
Code:
class ISocket {
public:
ISocket();
~ISocket();
virtual void OnConnect() = 0;
virtual void OnDisconnect() = 0;
virtual void OnRecv(const std::string& data) = 0;
virtual void OnTimeout() = 0;
virtual void OnError(const std::string& data) = 0;
void SetHostname(const std::string& hostname);
void SetPort(const std::string& port);
void SetTimeoutUSec(long int usec);
void SetTimeoutSec(long int sec);
const std::string GetHostname();
const std::string GetPort();
long int GetTimeoutSec();
long int GetTimeoutUSec();
void Connect();
void Disconnect();
void SendData(const char* format, ...);
private:
void RecvLoop();
std::string m_hostname;
std::string m_port;
long int m_sec;
long int m_usec;
int m_socket;
int pfd[2];
};
When Conenct() is called, it will attempt to conenct a socket; calling OnConnect on success, OnDisconnect() on failure, and OnTimeout() on connection timeout. Both OnTimeout() and OnDisconnect() call Connect() again, to automatically reconnect until success, causing recursion. Given enough calls, I'll get a stack overflow... anyone know of an elegant way around this, while maintaining my intended functionality?