2 * Copyright (c) 1999 Adrian Sun (asun@zoology.washington.edu)
3 * Copyright (c) 1990,1991 Regents of The University of Michigan.
4 * All Rights Reserved. See COPYRIGHT.
13 static int _netddp_sendto_dummy;
18 #include <sys/types.h>
19 #include <sys/socket.h>
24 #include <at/appletalk.h>
28 #include <netatalk/at.h>
29 #include <netatalk/endian.h>
30 #include <netatalk/ddp.h>
31 #include <atalk/netddp.h>
34 #define MAX(a, b) ((a) < (b) ? (b) : (a))
38 int netddp_sendto(int fd, void *buf, int buflen, unsigned int dummy,
39 const struct sockaddr *addr, unsigned int addrlen)
42 struct ddpehdr ddphdr;
43 const struct sockaddr_at *sat = (const struct sockaddr_at *) addr;
46 iov[0].iov_base = (void *) &ddphdr;
47 iov[0].iov_len = sizeof(ddphdr);
48 iov[1].iov_base = buf;
49 iov[1].iov_len = buflen;
54 memset(&ddphdr, 0, sizeof(ddphdr));
55 ddphdr.deh_len = htons(sizeof(ddphdr) + buflen);
56 ddphdr.deh_dnet = sat->sat_addr.s_net;
57 ddphdr.deh_dnode = sat->sat_addr.s_node;
58 ddphdr.deh_dport = sat->sat_port;
59 while ((i = writev(fd, iov, 2)) < 0) {
64 return MAX(0, i - sizeof(ddphdr));
67 #endif /* os x server */