sstream.cpp: better error reporting when things go wrong (specifically, say which host is responsible)
parent
a424a29602
commit
f24b51666a
|
@ -78,7 +78,10 @@ public:
|
|||
std::string toString() const;
|
||||
|
||||
/// Handle the last socket-specific error (looks up the appropriate OS description)
|
||||
static bool handleError(const std::string &cmd, ELogLevel level = EError);
|
||||
inline bool handleError(const std::string &cmd, ELogLevel level = EError) { return SocketStream::handleError(m_peer, cmd, level); }
|
||||
|
||||
/// Handle the last socket-specific error (looks up the appropriate OS description)
|
||||
static bool handleError(const std::string &peer, const std::string &cmd, ELogLevel level = EError);
|
||||
|
||||
//! @}
|
||||
// =============================================================
|
||||
|
|
|
@ -246,15 +246,15 @@ void SocketStream::flush() {
|
|||
/* Ignore */
|
||||
}
|
||||
|
||||
bool SocketStream::handleError(const std::string &cmd, ELogLevel level) {
|
||||
bool SocketStream::handleError(const std::string &peer, const std::string &cmd, ELogLevel level) {
|
||||
#if !defined(__WINDOWS__)
|
||||
if (level == EWarn && errno == EINTR) /* This is not really a warning -- just retry the operation. */
|
||||
return false;
|
||||
|
||||
if (cmd.find("(") == std::string::npos)
|
||||
Log(level, "Error in %s(): %s!", cmd.c_str(), strerror(errno));
|
||||
Log(level, "[%s] Error in %s(): %s!", peer.c_str(), cmd.c_str(), strerror(errno));
|
||||
else
|
||||
Log(level, "Error in %s: %s!", cmd.c_str(), strerror(errno));
|
||||
Log(level, "[%s] Error in %s: %s!", peer.c_str(), cmd.c_str(), strerror(errno));
|
||||
#else
|
||||
std::string err;
|
||||
int error = WSAGetLastError();
|
||||
|
|
|
@ -293,15 +293,15 @@ int mtssrv(int argc, char **argv) {
|
|||
/* Allocate a socket */
|
||||
sock = socket(p->ai_family, p->ai_socktype, p->ai_protocol);
|
||||
if (sock == -1)
|
||||
SocketStream::handleError("socket");
|
||||
SocketStream::handleError("none", "socket");
|
||||
|
||||
/* Avoid "bind: socket already in use" */
|
||||
if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char *) &one, sizeof(int)) < 0)
|
||||
SocketStream::handleError("setsockopt");
|
||||
SocketStream::handleError("none", "setsockopt");
|
||||
|
||||
/* Bind the socket to the port number */
|
||||
if (bind(sock, p->ai_addr, (socklen_t) p->ai_addrlen) == -1) {
|
||||
SocketStream::handleError(formatString("bind(%s:%i)", hostName.c_str(), listenPort), EError);
|
||||
SocketStream::handleError("none", formatString("bind(%s:%i)", hostName.c_str(), listenPort), EError);
|
||||
#if defined(__WINDOWS__)
|
||||
closesocket(sock);
|
||||
#else
|
||||
|
@ -317,7 +317,7 @@ int mtssrv(int argc, char **argv) {
|
|||
freeaddrinfo(servinfo);
|
||||
|
||||
if (listen(sock, CONN_BACKLOG) == -1)
|
||||
SocketStream::handleError("bind");
|
||||
SocketStream::handleError("none", "bind");
|
||||
SLog(EInfo, "Enter mtssrv -h for more options");
|
||||
|
||||
#if defined(__WINDOWS__)
|
||||
|
@ -358,7 +358,7 @@ int mtssrv(int argc, char **argv) {
|
|||
if (errno == EINTR)
|
||||
continue;
|
||||
#endif
|
||||
SocketStream::handleError("accept", EWarn);
|
||||
SocketStream::handleError("none", "accept", EWarn);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
|
@ -57,15 +57,15 @@ void ServerThread::run() {
|
|||
/* Allocate a socket */
|
||||
m_socket = socket(p->ai_family, p->ai_socktype, p->ai_protocol);
|
||||
if (m_socket == -1)
|
||||
SocketStream::handleError("socket");
|
||||
SocketStream::handleError("none", "socket");
|
||||
|
||||
/* Avoid "bind: socket already in use" */
|
||||
if (setsockopt(m_socket, SOL_SOCKET, SO_REUSEADDR, (char *) &one, sizeof(int)) < 0)
|
||||
SocketStream::handleError("setsockopt");
|
||||
SocketStream::handleError("none", "setsockopt");
|
||||
|
||||
/* Bind the socket to the port number */
|
||||
if (bind(m_socket, p->ai_addr, (socklen_t) p->ai_addrlen) == -1) {
|
||||
SocketStream::handleError(formatString("bind(%s:%i)", m_nodeName.c_str(), m_listenPort), EError);
|
||||
SocketStream::handleError("none", formatString("bind(%s:%i)", m_nodeName.c_str(), m_listenPort), EError);
|
||||
#if defined(__WINDOWS__)
|
||||
closesocket(m_socket);
|
||||
#else
|
||||
|
@ -81,7 +81,7 @@ void ServerThread::run() {
|
|||
freeaddrinfo(servinfo);
|
||||
|
||||
if (listen(m_socket, CONN_BACKLOG) == -1)
|
||||
SocketStream::handleError("bind");
|
||||
SocketStream::handleError("none", "bind");
|
||||
|
||||
SLog(EInfo, "%s: Listening on port %i.. Close the window to stop.",
|
||||
m_nodeName.c_str(), m_listenPort);
|
||||
|
@ -114,7 +114,7 @@ void ServerThread::run() {
|
|||
if (errno == EINTR)
|
||||
continue;
|
||||
#endif
|
||||
SocketStream::handleError("accept", EWarn);
|
||||
SocketStream::handleError("none", "accept", EWarn);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue