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