|
|
1.1 root 1: #include <sys/types.h>
2: #include <sys/inet/udp_user.h>
3: #include <errno.h>
4:
5: extern int errno;
6:
7: udp_connect(sport, dhost, dport)
8: in_addr dhost;
9: udp_port sport, dport;
10: {
11: return udp_open(UDPC_CONNECT, sport, dhost, dport, (struct udpreply *)0);
12: }
13:
14: udp_listen(sport, reply)
15: udp_port sport;
16: struct udpreply *reply;
17: {
18: return udp_open(UDPC_LISTEN, sport, 0L, 0, reply);
19: }
20:
21: udp_datagram(sport)
22: udp_port sport;
23: {
24: return udp_open(UDPC_DATAGRAM, sport, 0L, 0, (struct udpreply *)0);
25: }
26:
27:
28: udp_open(cmd, sport, dhost, dport, reply)
29: int cmd;
30: u_short sport, dport;
31: in_addr dhost;
32: struct udpreply *reply;
33: {
34: int fd, n;
35: struct udpuser uu;
36: struct udpreply ur;
37: char name[16];
38:
39: uu.cmd = cmd;
40: uu.sport = sport;
41: uu.dport = dport;
42: uu.dst = dhost;
43:
44: for(n = 0; n < 100; n++){
45: sprintf(name, "/dev/udp%02d", n);
46: fd = open(name, 2);
47: if(fd >= 0)
48: break;
49: }
50: if (fd < 0)
51: return -1;
52:
53: if (write(fd, (char *)&uu, sizeof(uu)) < 0) {
54: err: close(fd);
55: return -1;
56: }
57: if (read (fd, (char *)&ur, sizeof(ur)) != sizeof(ur))
58: goto err;
59: if (ur.reply != UDPR_OK)
60: goto err;
61: if (reply)
62: *reply = ur;
63: return fd;
64: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.