Browse thread
Udp connection problem
-
Frederico Valente
-
Stéphane Glondu
- Frederico Valente
- Serge Aleynikov
-
Stéphane Glondu
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ 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;
}