| * prefix of all v4 addresses |
| * copied from libip because libc cannot depend on libip |
| static uchar v4prefix[IPaddrlen] = { |
| udpread(int fd, Udphdr *hdr, void *buf, long n) |
| n = recvfrom(fd, buf, n, 0, (struct sockaddr*)&sin, &len); |
| werrstr("recvfrom acting weird"); |
| memset(hdr, 0, sizeof *hdr); |
| memmove(hdr->raddr, v4prefix, IPaddrlen); |
| *(u32int*)(hdr->raddr+12) = *(u32int*)&sin.sin_addr; |
| *(u16int*)hdr->rport = *(u16int*)&sin.sin_port; |
| udpwrite(int fd, Udphdr *hdr, void *buf, long n) |
| memset(&sin, 0, sizeof sin); |
| sin.sin_family = AF_INET; |
| *(u32int*)&sin.sin_addr = *(u32int*)(hdr->raddr+12); |
| *(u16int*)&sin.sin_port = *(u16int*)hdr->rport; |
| return sendto(fd, buf, n, 0, (struct sockaddr*)&sin, sizeof sin); |