IPv6 support: fixed IP string getting on accept()
git-svn-id: http://mc-server.googlecode.com/svn/trunk@1256 0a769ca7-a7f5-676a-18bf-c427514a06d6
This commit is contained in:
parent
ea750b9745
commit
fcdc68fd8e
@ -214,7 +214,7 @@ void cListenThread::Execute(void)
|
|||||||
{
|
{
|
||||||
if (FD_ISSET(itr->GetSocket(), &fdRead))
|
if (FD_ISSET(itr->GetSocket(), &fdRead))
|
||||||
{
|
{
|
||||||
cSocket Client = itr->Accept();
|
cSocket Client = (m_Family == cSocket::IPv4) ? itr->AcceptIPv4() : itr->AcceptIPv6();
|
||||||
m_Callback.OnConnectionAccepted(Client);
|
m_Callback.OnConnectionAccepted(Client);
|
||||||
}
|
}
|
||||||
} // for itr - m_Sockets[]
|
} // for itr - m_Sockets[]
|
||||||
|
@ -265,37 +265,40 @@ bool cSocket::Listen(int a_Backlog)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
cSocket cSocket::Accept()
|
cSocket cSocket::AcceptIPv4(void)
|
||||||
{
|
{
|
||||||
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 (SClient.IsValid() && (from.sin_addr.s_addr != 0)) // Get IP in string form
|
if (SClient.IsValid() && (from.sin_addr.s_addr != 0)) // Get IP in string form
|
||||||
{
|
{
|
||||||
SClient.m_IPString = inet_ntoa(from.sin_addr);
|
SClient.m_IPString = inet_ntoa(from.sin_addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
return SClient;
|
return SClient;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
int cSocket::Connect(SockAddr_In & a_Address)
|
cSocket cSocket::AcceptIPv6(void)
|
||||||
{
|
{
|
||||||
sockaddr_in local;
|
sockaddr_in6 from;
|
||||||
|
socklen_t fromlen = sizeof(from);
|
||||||
|
|
||||||
local.sin_family = a_Address.Family;
|
cSocket SClient = accept(m_Socket, (sockaddr *)&from, &fromlen);
|
||||||
local.sin_addr.s_addr = a_Address.Address;
|
|
||||||
local.sin_port = htons((u_short)a_Address.Port);
|
|
||||||
|
|
||||||
return connect(m_Socket, (sockaddr *)&local, sizeof(local));
|
// Get IP in string form:
|
||||||
|
if (SClient.IsValid())
|
||||||
|
{
|
||||||
|
char buffer[INET6_ADDRSTRLEN];
|
||||||
|
inet_ntop(AF_INET6, &(from.sin6_addr), buffer, sizeof(buffer));
|
||||||
|
SClient.m_IPString.assign(buffer);
|
||||||
|
}
|
||||||
|
return SClient;
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -77,8 +77,11 @@ public:
|
|||||||
/// Sets the socket to listen for incoming connections. Returns true if successful.
|
/// Sets the socket to listen for incoming connections. Returns true if successful.
|
||||||
bool Listen(int a_Backlog = DEFAULT_BACKLOG);
|
bool Listen(int a_Backlog = DEFAULT_BACKLOG);
|
||||||
|
|
||||||
/// Accepts an incoming connection. Blocks if none available.
|
/// Accepts an IPv4 incoming connection. Blocks if none available.
|
||||||
cSocket Accept();
|
cSocket AcceptIPv4(void);
|
||||||
|
|
||||||
|
/// Accepts an IPv6 incoming connection. Blocks if none available.
|
||||||
|
cSocket AcceptIPv6(void);
|
||||||
|
|
||||||
/// Connects to a localhost socket on the specified port using IPv4; returns true if successful.
|
/// Connects to a localhost socket on the specified port using IPv4; returns true if successful.
|
||||||
bool ConnectToLocalhostIPv4(unsigned short a_Port);
|
bool ConnectToLocalhostIPv4(unsigned short a_Port);
|
||||||
|
@ -461,7 +461,7 @@ bool cSocketThreads::cSocketThread::Start(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Finish connecting the control socket by accepting connection from the thread's socket
|
// Finish connecting the control socket by accepting connection from the thread's socket
|
||||||
cSocket tmp = m_ControlSocket2.Accept();
|
cSocket tmp = m_ControlSocket2.AcceptIPv4();
|
||||||
if (!tmp.IsValid())
|
if (!tmp.IsValid())
|
||||||
{
|
{
|
||||||
LOGERROR("Cannot link Control sockets for a cSocketThread (\"%s\"); continuing, but server may be unreachable from now on.", cSocket::GetLastErrorString().c_str());
|
LOGERROR("Cannot link Control sockets for a cSocketThread (\"%s\"); continuing, but server may be unreachable from now on.", cSocket::GetLastErrorString().c_str());
|
||||||
|
Loading…
Reference in New Issue
Block a user