sockets
    Mark Bush 
    bush%prg.oxford.ac.uk at nsfnet-relay.ac.uk
       
    Mon Aug 28 08:03:44 AEST 1989
    
    
  
Firstly, I would like to thank Paul DuBois for his suggestion.  Unfortunately
it didn't answer my original question which was "how do I get broadcasting
on sockets to work?".  I hadn't worded it like that, but that was the intent.
With a little work (and dbx and those usefully arranged `printf's) I managed
to solve my problem.
It appears that my problem was the line:
     dst.sin_addr = inet_makeaddr(net, INADDR_ANY);
The value I was using for `net' was wrong.  According to section 5.5 of the
"IPC Primer", this value can be obtained from `inet_netof'.  I found out
that this returned an address of the form `129.67.0.0' where I wanted
`129.67.14.0'.  What I did was to use:
     char hostname[15];
     struct hostent *thishost;
     struct in_addr *address;
     struct sockaddr_in dst;
and set the address with the following code:
     gethostname(hostname, 15);
     thishost = gethostbyname(hostname);
     address = (struct in_addr *)(thishost->h_addr);
     address->S_un.S_addr &= 0x0ffffff00;
          :
          :
     dst.sin_addr = *address;
This worked fine.  The same chapter of the documentation mentions use of the
ioctl call `SIOCGICONF'.  I haven't tried this yet, so I don't know if this
method also requires a kludge to work of if it supplies correct information.
Of course, this problem may well just be relevant to SunOS 3.x.  There is
an option (SO_BROADCAST) that can be set with `setsockoption' in 4.x that
probably does this correctly---again, I haven't tried this on 4.x yet.
Section 5.5 of the "IPC Primer" in the SunOS 3.x manuals can thus be happily
disregarded (unless, of course, you know different 8*)
Mark Bush                      bush%uk.ac.oxford.prg at ac.uk
Teaching Support Programmer    bush%prg.oxford.ac.uk at nsfnet-relay.ac.uk
OUCL                           ...!uunet!mcvax!ukc!ox-prg!bush
    
    
More information about the Comp.unix.wizards
mailing list