Link to home
Start Free TrialLog in
Avatar of 1ce
1ce

asked on

upd broadcast in C

Hi

I want to send out udp broadcast to the whole subnet in the simplest way possible. I'm not familiar with socket.h to figure out what to do. Can someone give me some pointer? Sorry for the small amount of point, that's all i have for now. I'll add more once i get more. Thanx
ASKER CERTIFIED SOLUTION
Avatar of jcaldwel
jcaldwel

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of 1ce
1ce

ASKER

Hi
when i compile this give an error:

if (ioctl(s, SIOCGIFBRDADDR, (char *) ifr) < 0) {

sizeof applied to an incomplete types

i'm on freebsd 4.7
Try changing:

memcpy((char *) &dst, (char *) &ifr->ifr_broadaddr, sizeof ifr->ifr_broadaddr);
to:
memcpy((char *) &dst, (char *) &ifr->ifr_broadaddr, sizeof(struct sockaddr_in));

and

if (setsockopt(s, SOL_SOCKET, SO_BROADCAST, &on, sizeof on)

To
if (setsockopt(s, SOL_SOCKET, SO_BROADCAST, &on, sizeof(int))


Add add an "#include <sys/ioctl.h>" to the top
Avatar of 1ce

ASKER

#include <unistd.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/socket.h>

int main(int argc, char **argv){
   int s, on;
   struct sockaddr dst;
   struct ifreq *ifr;
   char sendbuff[ 1024 ]="balbalbal";
   //char *sendaddr="10.10.255.255";
   /* Create And Set Up Socket */
   s = socket(AF_INET, SOCK_DGRAM, 0);
   on = 1;

   if (setsockopt(s, SOL_SOCKET, SO_BROADCAST, &on, sizeof(int)) == -1) {
      printf("setsockopt SO_BROADCAST");
      return 0;
   }

   if (ioctl(s,SIOCGIFBRDADDR, (char *) ifr) < 0){
      printf( "ioctl error" );
      return;
   }
   memcpy((char *) &dst, (char *)&ifr->ifr_broadaddr,sizeof(struct sockaddr_in));
   sendto(s, sendbuff, 1024, 0, (struct sockaddr *)&dst, sizeof (dst));

}

----------------------------------------------

It still giving the same error msg when compile. =(

>>if (ioctl(s,SIOCGIFBRDADDR, (char *) ifr) < 0){
socket_udp_bd.c:21: sizeof applied to an incomplete type

>>memcpy((char *) &dst, (char *)&ifr->ifr_broadaddr,sizeof(struct sockaddr_in));
socket_udp_bd.c:25: dereferencing pointer to incomplete type
socket_udp_bd.c:25: sizeof applied to an incomplete type

Avatar of 1ce

ASKER

#include <unistd.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/socket.h>

int main(int argc, char **argv){
   int s, on;
   struct sockaddr dst;
   struct ifreq *ifr;
   char sendbuff[ 1024 ]="balbalbal";
   //char *sendaddr="10.10.255.255";
   /* Create And Set Up Socket */
   s = socket(AF_INET, SOCK_DGRAM, 0);
   on = 1;

   if (setsockopt(s, SOL_SOCKET, SO_BROADCAST, &on, sizeof(int)) == -1) {
      printf("setsockopt SO_BROADCAST");
      return 0;
   }

   if (ioctl(s,SIOCGIFBRDADDR, (char *) ifr) < 0){
      printf( "ioctl error" );
      return;
   }
   memcpy((char *) &dst, (char *)&ifr->ifr_broadaddr,sizeof(struct sockaddr_in));
   sendto(s, sendbuff, 1024, 0, (struct sockaddr *)&dst, sizeof (dst));

}

----------------------------------------------

It still giving the same error msg when compile. =(

>>if (ioctl(s,SIOCGIFBRDADDR, (char *) ifr) < 0){
socket_udp_bd.c:21: sizeof applied to an incomplete type

>>memcpy((char *) &dst, (char *)&ifr->ifr_broadaddr,sizeof(struct sockaddr_in));
socket_udp_bd.c:25: dereferencing pointer to incomplete type
socket_udp_bd.c:25: sizeof applied to an incomplete type

Avatar of 1ce

ASKER

anyhow, i got it figured out, thanx