Version française
Home     About     Download     Resources     Contact us    
Browse thread
Udp connection problem
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Frederico Valente <a25285@a...>
Subject: Re: [Caml-list] Udp connection problem
Stéphane Glondu wrote:
> Frederico Valente a écrit :
>>     I am trying to communicate with an udp server currently in my computer.
>> The problem is that although I can send messages, and they are correctly
>> received, I dont get any message back (I should). Running a sniffer I
>> get an ICMP Unreacheable (Port Unreacheable) after the server response.
> 
> It sounds like a firewall is filtering your traffic.
> 

Indeed it sounds, but I don't think it is, as I can set up the 
connection using C++.

bool Connection::connect(const char *host, int port )
{
   struct hostent *host_ent;
   struct in_addr *addr_ptr;
   struct sockaddr_in  cli_addr ;
   int    sockfd ;

   m_sock.socketfd = -1 ;

   if( (host_ent = (struct hostent*)gethostbyname(host)) == NULL)
   {
     // if not a string, get information from IP adress.
     if( inet_addr(host) == INADDR_NONE )
     {
       cerr << "(Connection::connect) Cannot find host " << host << endl;
       return false ;
     }
   }
   else   // get the necessary information from the hostname (string)
   {
     addr_ptr = (struct in_addr *) *host_ent->h_addr_list;
     host = inet_ntoa(*addr_ptr);
   }

   //  Open UDP socket.
   if( (sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
   {
     cerr << "(Connection::connect) Cannot create socket " << host << endl;
     return false ;
   }

   // insert the information of the client
   cli_addr.sin_family      = AF_INET ;
   cli_addr.sin_addr.s_addr = htonl(INADDR_ANY) ;
   cli_addr.sin_port        = htons(0) ;

   // bind the client to the server socket
   if(::bind(sockfd, (struct sockaddr *) &cli_addr, sizeof(cli_addr)) < 0)
   {
     cerr << "(Connection::connect) Cannot bind local address " << host 
<< endl;
     return false ;
   }

   //  Fill in the structure with the address of the server.
   m_sock.socketfd = sockfd ;

   m_sock.serv_addr.sin_family       = AF_INET ;
   m_sock.serv_addr.sin_addr.s_addr  = inet_addr(host);
   m_sock.serv_addr.sin_port         = htons(port) ;

   return true;
}