Return TypeFunction nameArguments
hzEcodehzIpListen::Activate(void)

Declared in file: hzIpServer.h
Defined in file : hzIpServer.cpp

Function Logic:

0:START 1:m_bOpflags&HZ_LISTEN_UDP 2:(m_nSocket=socket(AF_INET,SOCK_DGRAM,0))<0 3:Return E_NOSOCKET 4:(m_nSocket=socket(AF_INET,SOCK_STREAM,0))<0 5:Return E_NOSOCKET 6:memset m_Address htonl m_Address htons m_Address nTries 7:nTries<=5; 8:bind sys_rc 9:sys_rc<0 10:hzwarn 11:close(m_nSocket)<0 12:Return E_CORRUPT 13:nTries==5 14:Return E_NOSOCKET 15:sleep 16:!(m_bOpflags&HZ_LISTEN_UDP) 17:listen(m_nSocket,5)<0 18:hzwarn 19:close(m_nSocket)<0 20:hzwarn 21:Return E_NOSOCKET 22:Return E_OK

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 ;
}