/* include udp_client */
#include "unpxti.h"
int
udp_client(const char *host, const char *serv, void **vptr, socklen_t *lenp)
{
int tfd;
void *handle;
struct netconfig *ncp;
struct nd_hostserv hs;
struct nd_addrlist *alp;
struct netbuf *np;
struct t_unitdata *tudptr;
handle = Setnetpath();
hs.h_host = (char *) host;
hs.h_serv = (char *) serv;
while ( (ncp = getnetpath(handle)) != NULL) {
if (strcmp(ncp->nc_proto, "udp") != 0)
continue;
if (netdir_getbyname(ncp, &hs, &alp) != 0)
continue;
tfd = T_open(ncp->nc_device, O_RDWR, NULL);
T_bind(tfd, NULL, NULL);
tudptr = T_alloc(tfd, T_UNITDATA, T_ADDR);
np = alp->n_addrs; /* use first server address */
tudptr->addr.len = min(tudptr->addr.maxlen, np->len);
memcpy(tudptr->addr.buf, np->buf, tudptr->addr.len);
endnetpath(handle);
netdir_free(alp, ND_ADDRLIST);
*vptr = tudptr; /* return pointer to t_unitdata{} */
*lenp = tudptr->addr.maxlen;/* and size of addresses */
return(tfd);
}
endnetpath(handle);
return(-1);
}
/* end udp_client */
int
Udp_client(const char *host, const char *serv, void **vptr, socklen_t *lenp)
{
int n;
if ( (n = udp_client(host, serv, vptr, lenp)) < 0)
err_quit("udp_client error for %s, %s", host, serv);
return(n);
}
syntax highlighted by Code2HTML, v. 0.9.1