Sending UDP packets

Andreas Höschler <ahoesch-st0f/[email protected]>
Newsgroups gmane.comp.macosx.devel
Message-ID <[email protected]>
Hello all,

I need to notify a dozen of applications when a specific event occurs 
in some service process. I thought it would be a good idea to use UDP 
packets for that. I googled and found the following code snippets

**********************************
UDP sender
**********************************
#define BUFLEN 512
#define NPACK 10
#define PORT 9930
#define SRV_IP "127.0.0.1"

      {
       struct sockaddr_in si_other;
       int s, i, slen=sizeof(si_other);
       char buf[BUFLEN];
       if ((s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1) 
NSLog(@"socket could not be opened");

      memset((char *) &si_other, 0, sizeof(si_other));
       si_other.sin_family = AF_INET;
       si_other.sin_port = htons(PORT);
       if (inet_aton(SRV_IP, &si_other.sin_addr)==0)
       {
          fprintf(stderr, "inet_aton() failed\n");
          exit(1);
       }

       for (i=0; i<NPACK; i++)
      {
          printf("Sending packet %d\n", i);
          sprintf(buf, "This is packet %d\n", i);
          if (sendto(s, buf, BUFLEN, 0, &si_other, slen) == -1)
            NSLog(@"sendto() failed");
        }
        close(s);
      }

**********************************
UDP receiver
**********************************
      {
       struct sockaddr_in si_me, si_other;
       int s, i, slen=sizeof(si_other);
       char buf[BUFLEN];
       if ((s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1) 
NSLog(@"socket failure");
       memset((char *) &si_me, 0, sizeof(si_me));
       si_me.sin_family = AF_INET;
       si_me.sin_port = htons(PORT);
       si_me.sin_addr.s_addr = htonl(INADDR_ANY);
       if (bind(s, &si_me, sizeof(si_me))==-1) NSLog(@"bind failed");
       for (i=0; i<NPACK; i++)
         {
          if (recvfrom(s, buf, BUFLEN, 0, &si_other, 
&slen)==-1)NSLog(@"recvfrom()");
          printf("Received packet from %s:%d\nData: %s\n\n", 
inet_ntoa(si_other.sin_addr), ntohs(si_other.sin_port), buf);
         }
      }

This works great on my Mac (10.2) when SRV_IP is "127.0.0.1". However, 
in the end the sender process will run on machien A and the receiver 
process on machine B, C, D, ... in our 192.168.1.0 LAN. I therefore 
tried to use SRV_IP = "192.168.1.255" instead. When I do that I get

UDPSender[9746] sendto() failed

Why does this not work or what is the correct address to use for 
interhost UDP traffic in a LAN?  What am I doing wrong?

Thanks a lot,

  Andreas
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.