Hello All,
I have a C program where I have created a UDP socket and bound to a particular ip address and a port number. As the program proceeds, msgs will be sent to different clients using the same socket, using the same port, but each has a different ip address. Is it possible to just overload the remoteServAddr1.sin_addr.s_addr with the desired ipaddress each time? Or is it important to bind the socket every time the ipaddress changes? If I call bind more than once, it gives me an error because the port is already in use.
struct hostent *h;
sd = socket(AF_INET,SOCK_DGRAM,0);
if(sd<0)
{
printf(" cannot open socket \n");
}
h = gethostbyname(address[0]); /*the first ip address*/
if(h==NULL)
{
printf("unknown host '%s' \n", address[0]);
}
h->h_name,inet_ntoa(*(struct in_addr *)h->h_addr_list[0]));
remoteServAddr.sin_family = h->h_addrtype;
memcpy((char *) &remoteServAddr.sin_addr.s_addr, h->h_addr_list[0], h->h_length);
remoteServAddr.sin_port = htons(REMOTE_SERVER_PORT);
/* bind any port */
cliAddr.sin_family = AF_INET;
cliAddr.sin_addr.s_addr = htonl(INADDR_ANY);
cliAddr.sin_port = htons(REMOTE_SERVER_PORT);
rc = bind(sd, (struct sockaddr *) &cliAddr, sizeof(cliAddr));
if(rc<0)
{
printf("cannot bind port\n");
}
I want to change the ipaddress which will be stored as address[1]..So rather than address[0] in the above code, I want address[1]( socket,port being the same)..
Something like this
memcpy((char *) &remoteServAddr.sin_addr.s_addr, address[1], h1->h_length);
accept(sd, (struct sockaddr *)(&remoteServAddr), &cliLen);
printf("sending %s to %s on UDP port %u \n",connection,inet_ntoa(remoteServAddr.sin_addr), ntohs(remoteServAddr1.sin_port));
rc = sendto(sd,connection,MAX_MSG, 0,(struct sockaddr *) &remoteServAddr, sizeof(remoteServAddr));
Is it possible at all??Any help would be appreciated..Right now its giving segmentation fault...
Thanks
Ani