|
|
researchv10 Norman
#include <sys/types.h>
#include <sys/inet/udp_user.h>
#include <errno.h>
extern int errno;
udp_connect(sport, dhost, dport)
in_addr dhost;
udp_port sport, dport;
{
return udp_open(UDPC_CONNECT, sport, dhost, dport, (struct udpreply *)0);
}
udp_listen(sport, reply)
udp_port sport;
struct udpreply *reply;
{
return udp_open(UDPC_LISTEN, sport, 0L, 0, reply);
}
udp_datagram(sport)
udp_port sport;
{
return udp_open(UDPC_DATAGRAM, sport, 0L, 0, (struct udpreply *)0);
}
udp_open(cmd, sport, dhost, dport, reply)
int cmd;
u_short sport, dport;
in_addr dhost;
struct udpreply *reply;
{
int fd, n;
struct udpuser uu;
struct udpreply ur;
char name[16];
uu.cmd = cmd;
uu.sport = sport;
uu.dport = dport;
uu.dst = dhost;
for(n = 0; n < 100; n++){
sprintf(name, "/dev/udp%02d", n);
fd = open(name, 2);
if(fd >= 0) {
flabclr(fd); /* for security unix */
break;
}
}
if (fd < 0)
return -1;
if (write(fd, (char *)&uu, sizeof(uu)) < 0) {
err: close(fd);
return -1;
}
if (read (fd, (char *)&ur, sizeof(ur)) != sizeof(ur))
goto err;
if (ur.reply != UDPR_OK)
goto err;
if (reply)
*reply = ur;
return fd;
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.