cSocket: added error logging to Bind() failures

git-svn-id: http://mc-server.googlecode.com/svn/trunk@233 0a769ca7-a7f5-676a-18bf-c427514a06d6
This commit is contained in:
madmaxoft@gmail.com 2012-02-05 15:41:56 +00:00
parent da87f9f3c1
commit d6925efab3

View File

@ -17,8 +17,8 @@
cSocket::cSocket( xSocket a_Socket ) cSocket::cSocket(xSocket a_Socket)
: m_Socket( a_Socket ) : m_Socket(a_Socket)
{ {
} }
@ -73,13 +73,13 @@ void cSocket::CloseSocket()
#else // _WIN32 #else // _WIN32
if( shutdown(m_Socket, SHUT_RDWR) != 0 )//SD_BOTH); if (shutdown(m_Socket, SHUT_RDWR) != 0)//SD_BOTH);
{ {
LOGWARN("Error on shutting down socket (%s)", m_IPString.c_str() ); LOGWARN("Error on shutting down socket (%s)", m_IPString.c_str());
} }
if( close(m_Socket) != 0 ) if (close(m_Socket) != 0)
{ {
LOGWARN("Error closing socket (%s)", m_IPString.c_str() ); LOGWARN("Error closing socket (%s)", m_IPString.c_str());
} }
#endif // else _WIN32 #endif // else _WIN32
@ -92,29 +92,29 @@ void cSocket::CloseSocket()
const char* cSocket::GetLastErrorString() const char * cSocket::GetLastErrorString()
{ {
#define CASE_AND_RETURN( x ) case x: return #x #define CASE_AND_RETURN(x) case x: return #x
#ifdef _WIN32 #ifdef _WIN32
switch( WSAGetLastError() ) switch (WSAGetLastError())
{ {
CASE_AND_RETURN( WSANOTINITIALISED ); CASE_AND_RETURN(WSANOTINITIALISED);
CASE_AND_RETURN( WSAENETDOWN ); CASE_AND_RETURN(WSAENETDOWN);
CASE_AND_RETURN( WSAEFAULT ); CASE_AND_RETURN(WSAEFAULT);
CASE_AND_RETURN( WSAENOTCONN ); CASE_AND_RETURN(WSAENOTCONN);
CASE_AND_RETURN( WSAEINTR ); CASE_AND_RETURN(WSAEINTR);
CASE_AND_RETURN( WSAEINPROGRESS ); CASE_AND_RETURN(WSAEINPROGRESS);
CASE_AND_RETURN( WSAENETRESET ); CASE_AND_RETURN(WSAENETRESET);
CASE_AND_RETURN( WSAENOTSOCK ); CASE_AND_RETURN(WSAENOTSOCK);
CASE_AND_RETURN( WSAEOPNOTSUPP ); CASE_AND_RETURN(WSAEOPNOTSUPP);
CASE_AND_RETURN( WSAESHUTDOWN ); CASE_AND_RETURN(WSAESHUTDOWN);
CASE_AND_RETURN( WSAEWOULDBLOCK ); CASE_AND_RETURN(WSAEWOULDBLOCK);
CASE_AND_RETURN( WSAEMSGSIZE ); CASE_AND_RETURN(WSAEMSGSIZE);
CASE_AND_RETURN( WSAEINVAL ); CASE_AND_RETURN(WSAEINVAL);
CASE_AND_RETURN( WSAECONNABORTED ); CASE_AND_RETURN(WSAECONNABORTED);
CASE_AND_RETURN( WSAETIMEDOUT ); CASE_AND_RETURN(WSAETIMEDOUT);
CASE_AND_RETURN( WSAECONNRESET ); CASE_AND_RETURN(WSAECONNRESET);
} }
return "No Error"; return "No Error";
#else #else
@ -133,7 +133,7 @@ int cSocket::SetReuseAddress()
#else #else
int yes = 1; int yes = 1;
#endif #endif
return setsockopt( m_Socket, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int) ); return setsockopt(m_Socket, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int));
} }
@ -144,8 +144,8 @@ int cSocket::WSAStartup()
{ {
#ifdef _WIN32 #ifdef _WIN32
WSADATA wsaData; WSADATA wsaData;
memset( &wsaData, 0, sizeof( wsaData ) ); memset(&wsaData, 0, sizeof(wsaData));
return ::WSAStartup( MAKEWORD(2, 2),&wsaData); return ::WSAStartup(MAKEWORD(2, 2),&wsaData);
#else #else
return 0; return 0;
#endif #endif
@ -164,28 +164,37 @@ cSocket cSocket::CreateSocket()
int cSocket::Bind( SockAddr_In& a_Address ) int cSocket::Bind(SockAddr_In& a_Address)
{ {
sockaddr_in local; sockaddr_in local;
if( a_Address.Family == ADDRESS_FAMILY_INTERNET ) if (a_Address.Family == ADDRESS_FAMILY_INTERNET)
local.sin_family = AF_INET; local.sin_family = AF_INET;
if( a_Address.Address == INTERNET_ADDRESS_ANY ) if (a_Address.Address == INTERNET_ADDRESS_ANY)
local.sin_addr.s_addr = INADDR_ANY; local.sin_addr.s_addr = INADDR_ANY;
local.sin_port=htons( (u_short)a_Address.Port ); local.sin_port=htons((u_short)a_Address.Port);
return bind( m_Socket, (sockaddr*)&local, sizeof(local)); int res = bind(m_Socket, (sockaddr*)&local, sizeof(local));
if (res != 0)
{
#ifdef _WIN32
LOGWARNING("bind() failed for port %d, WSAGLE = %d", a_Address.Port, WSAGetLastError());
#else // _WIN32
LOGWARNING("bind() failed for port %d, errno = %d", a_Address.Port, errno);
#endif // else _WIN32
}
return res;
} }
int cSocket::Listen( int a_Backlog ) int cSocket::Listen(int a_Backlog)
{ {
return listen( m_Socket, a_Backlog ); return listen(m_Socket, a_Backlog);
} }
@ -197,12 +206,12 @@ cSocket cSocket::Accept()
sockaddr_in from; sockaddr_in from;
socklen_t fromlen=sizeof(from); socklen_t fromlen=sizeof(from);
cSocket SClient = accept( m_Socket, (sockaddr*)&from, &fromlen); cSocket SClient = accept(m_Socket, (sockaddr*)&from, &fromlen);
if( from.sin_addr.s_addr && SClient.IsValid() ) // Get IP in string form if (from.sin_addr.s_addr && SClient.IsValid()) // Get IP in string form
{ {
SClient.m_IPString = inet_ntoa(from.sin_addr); SClient.m_IPString = inet_ntoa(from.sin_addr);
//LOG("cSocket::Accept() %s", SClient.m_IPString ); //LOG("cSocket::Accept() %s", SClient.m_IPString);
} }
return SClient; return SClient;
@ -212,7 +221,7 @@ cSocket cSocket::Accept()
int cSocket::Receive( char* a_Buffer, unsigned int a_Length, unsigned int a_Flags ) int cSocket::Receive(char* a_Buffer, unsigned int a_Length, unsigned int a_Flags)
{ {
return recv(m_Socket, a_Buffer, a_Length, a_Flags); return recv(m_Socket, a_Buffer, a_Length, a_Flags);
} }