2 * $Id: netddp_recvfrom.c,v 1.5 2003-02-17 02:02:25 srittau Exp $
4 * Copyright (c) 1999 Adrian Sun (asun@zoology.washington.edu)
5 * Copyright (c) 1990,1991 Regents of The University of Michigan.
6 * All Rights Reserved. See COPYRIGHT.
13 #endif /* HAVE_CONFIG_H */
18 #endif /* HAVE_UNISTD_H */
19 #include <sys/types.h>
20 #include <sys/socket.h>
25 #include <netat/appletalk.h>
26 #include <netat/ddp.h>
27 #endif /* MACOSX_SERVER */
29 #include <netatalk/at.h>
30 #include <netatalk/endian.h>
31 #include <netatalk/ddp.h>
32 #include <atalk/netddp.h>
35 #define MAX(a, b) ((a) < (b) ? (b) : (a))
39 int netddp_recvfrom(int fd, void *buf, int buflen, unsigned int dummy,
40 struct sockaddr *addr, unsigned int *addrlen)
43 struct ddpehdr ddphdr;
44 struct sockaddr_at *sat = (struct sockaddr_at *) addr;
47 iov[0].iov_base = (void *) &ddphdr;
48 iov[0].iov_len = sizeof(ddphdr);
49 iov[1].iov_base = buf;
50 iov[1].iov_len = buflen;
52 while ((i = readv(fd, iov, 2)) < 0) {
58 sat->sat_addr.s_net = ddphdr.deh_snet;
59 sat->sat_addr.s_node = ddphdr.deh_snode;
60 sat->sat_port = ddphdr.deh_sport;
63 return MAX(0, i - sizeof(ddphdr));
66 #endif /* os x server */