net: extend Sock with a method to check whether connected

This will be convenient in the I2P SAM implementation.
This commit is contained in:
Vasil Dimov
2021-01-21 16:59:55 +01:00
parent 42c779f503
commit 5bac7e45e1
2 changed files with 32 additions and 0 deletions

View File

@@ -250,6 +250,31 @@ std::string Sock::RecvUntilTerminator(uint8_t terminator,
}
}
bool Sock::IsConnected(std::string& errmsg) const
{
if (m_socket == INVALID_SOCKET) {
errmsg = "not connected";
return false;
}
char c;
switch (Recv(&c, sizeof(c), MSG_PEEK)) {
case -1: {
const int err = WSAGetLastError();
if (IOErrorIsPermanent(err)) {
errmsg = NetworkErrorString(err);
return false;
}
return true;
}
case 0:
errmsg = "closed";
return false;
default:
return true;
}
}
#ifdef WIN32
std::string NetworkErrorString(int err)
{