| Return Type | Function name | Arguments |
|---|---|---|
| hzEcode | hzIpListen::Activate | (void) |
Declared in file: hzIpServer.h
Defined in file : hzIpServer.cpp
Function Logic:
Function body:
hzEcode hzIpListen::Activate (void)
{
_hzfunc("hzIpListen::Activate") ;
uint32_t nTries ;
int32_t sys_rc ;
if (m_bOpflags & HZ_LISTEN_UDP)
{
if ((m_nSocket = socket(AF_INET, SOCK_DGRAM, 0))< 0)
{
hzerr(E_NOSOCKET, "Could not create UDP server socket (errno=%d)", errno) ;
return E_NOSOCKET ;
}
}
else
{
if ((m_nSocket = socket(AF_INET, SOCK_STREAM, 0))< 0)
{
hzerr(E_NOSOCKET, "Could not create TCP server socket (errno=%d)", errno) ;
return E_NOSOCKET ;
}
}
memset(&m_Address, 0,sizeof(SOCKADDRIN)) ;
m_Address.sin_family = AF_INET ;
m_Address.sin_addr.s_addr = htonl(INADDR_ANY) ;
m_Address.sin_port = htons(m_nPort) ;
for (nTries = 1; nTries <&eq; 5; nTries++)
{
sys_rc = bind(m_nSocket, (SOCKADDR*) &m_Address, sizeof(m_Address)) ;
if (sys_rc < 0)
{
hzwarn(E_NOSOCKET, "Server could not bind to port %d (attempt %d)", m_nPort, nTries) ;
if (close(m_nSocket) < 0)
{
hzerr(E_CORRUPT, "Could not close socket %d (port %d) after bind_fail. Errno=%d", m_nSocket, m_nPort, errno) ;
return E_CORRUPT ;
}
if (nTries == 5)
return E_NOSOCKET ;
sleep(5);
continue ;
}
break ;
}
if (!(m_bOpflags & HZ_LISTEN_UDP))
{
if (listen(m_nSocket, 5)< 0)
{
hzwarn(E_NOSOCKET, "Server listening socket (sock %d) is not listening on port %d. Errno=%d", m_nSocket, m_nPort, errno) ;
if (close(m_nSocket) < 0)
hzwarn(E_CORRUPT, "Could not close socket %d after listen_fail. Errno=%d", m_nSocket, errno) ;
return E_NOSOCKET ;
}
}
return E_OK ;
}