6 #include <sys/socket.h>
7 #include <netinet/in.h>
10 * prefix of all v4 addresses
11 * copied from libip because libc cannot depend on libip
13 static uchar v4prefix[IPaddrlen] = {
21 udpread(int fd, Udphdr *hdr, void *buf, long n)
23 struct sockaddr_in sin;
27 n = recvfrom(fd, buf, n, 0, (struct sockaddr*)&sin, &len);
28 if(len != sizeof sin){
29 werrstr("recvfrom acting weird");
34 memset(hdr, 0, sizeof *hdr);
35 memmove(hdr->raddr, v4prefix, IPaddrlen);
36 *(u32int*)(hdr->raddr+12) = *(u32int*)&sin.sin_addr;
37 *(u16int*)hdr->rport = *(u16int*)&sin.sin_port;
42 udpwrite(int fd, Udphdr *hdr, void *buf, long n)
44 struct sockaddr_in sin;
46 memset(&sin, 0, sizeof sin);
47 sin.sin_family = AF_INET;
48 *(u32int*)&sin.sin_addr = *(u32int*)(hdr->raddr+12);
49 *(u16int*)&sin.sin_port = *(u16int*)hdr->rport;
50 return sendto(fd, buf, n, 0, (struct sockaddr*)&sin, sizeof sin);