Changeset 564

Show
Ignore:
Timestamp:
06/10/06 13:17:13 (3 years ago)
Author:
common
Message:

nepenthes
- UDPSocket, fix source based routing for udp, bind local address for connect' connections

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • nepenthes/trunk/nepenthes-core/src/UDPSocket.cpp

    r550 r564  
    216216bool UDPSocket::connectHost() 
    217217{ 
    218         logInfo("UDP 'connecting' %s:%i \n",inet_ntoa(* (in_addr *)&m_RemoteHost), m_RemotePort); 
     218        string localhost, remotehost; 
     219        localhost = inet_ntoa(* (in_addr *)&m_LocalHost); 
     220        remotehost = inet_ntoa(* (in_addr *)&m_RemoteHost); 
     221        logDebug("UDP 'connecting' %s:%i -> %s:%i \n",localhost.c_str(),m_LocalPort, remotehost.c_str(), m_RemotePort); 
    219222         
    220223        m_Socket=socket(AF_INET, SOCK_DGRAM, 0); 
     224 
     225        if(m_Socket < 0) 
     226        { 
     227                logCrit("Error creating Socket %s \n",strerror(errno)); 
     228                return false; 
     229        } 
     230 
     231        struct sockaddr_in addrBind; 
     232        addrBind.sin_family = AF_INET; 
     233 
     234        addrBind.sin_addr.s_addr = getLocalHost(); 
     235        addrBind.sin_port = htons(getLocalPort()); 
     236 
     237        if ( bind(m_Socket, (struct sockaddr *) &addrBind, sizeof(addrBind)) < 0 ) 
     238        { 
     239                logCrit("Could not Bind Socket for (udp) connectHost %i\n%s\n", m_LocalPort,strerror(errno)); 
     240                return false; 
     241        } 
     242 
     243        int32_t iSize = sizeof(addrBind); 
     244        getsockname(m_Socket, (struct sockaddr *) &addrBind, (socklen_t *) &iSize); 
     245        m_LocalPort = ntohs( ( (sockaddr_in *)&addrBind)->sin_port ) ; 
     246 
    221247 
    222248#ifdef WIN32 
     
    227253#endif 
    228254 
    229  
    230         sockaddr_in ssin;  
    231  
    232         ssin.sin_family=AF_INET; 
    233         ssin.sin_port=htons(m_RemotePort); 
    234         ssin.sin_addr.s_addr=m_RemoteHost; 
    235255    m_LastAction = time(NULL); 
    236256 
    237         if(m_Socket > 0) 
    238                 return true; 
    239         logCrit("Error creating Socket %s \n",strerror(errno)); 
    240         return false; 
     257        return true; 
    241258} 
    242259