|
|
This example uses options management to request that the TLI endpoint be configured to allow the sending of broadcast datagrams.
In this example, fd represents a UDP endpoint obtained by using t_open on _PATH_UDP (defined in <paths.h>).
\#include <sys/types.h>
\#include <sys/socket.h>
\#include <netinet/in.h>
\#include <tiuser.h>
\#include <fcntl.h>
\#include <paths.h>
.
.
int fd, r;
fd = t_open(_PATH_UDP, O_RDWR, (struct t_info *)0);
.
.
r = tli_set_broadcast(fd);
.
.
int
tli_set_broadcast(fd)
int fd;
{
struct t_optmgmt *opt;
struct opthdr *ohdr;
/* use t_alloc to acquire a t_optmgmt structure */
if (!(opt = (struct t_optmgmt *) t_alloc(fd, T_OPTMGMT, T_ALL))) {
fprintf(stderr, "Couldn't allocate t_optmgmt\n");
return -1;
}
/* set ohdr to point at the optmgmt structure */
ohdr = (struct opthdr *) opt->opt.buf;
ohdr->level = SOL_SOCKET; /* generic option */
ohdr->name = SO_BROADCAST; /* desire broadcast ability */
ohdr->len = OPTLEN(sizeof(int)); /* rounds length by sizeof(long) */
/* store desired value immediately following the opthdr */
*((int *) OPTVAL(ohdr)) = 1; /* 1 means turn on */
opt->opt.len = sizeof(struct opthdr) + OPTLEN(sizeof(int));
opt->flags = T_NEGOTIATE; /* change current value */
if (t_optmgmt(fd, opt, opt) < 0) {
fprintf(stderr,"Options management failed\n");
return -1;
}
(void) t_free(opt, T_OPTMGMT);
return 0;
}