6 #include <netinet/in.h>
8 #include <sys/socket.h>
11 #include "lib_swift.h"
13 struct sockSwiftaddr transformFromAddrToSwift(struct listsockaddr lsa)
15 struct sockSwiftaddr ssa;
18 for (i = 0; i < lsa.N; i++)
20 ssa.sin_addr.s_addr[i] = lsa.sa[i].sin_addr.s_addr;
26 struct listsockaddr transformFromSwiftToAddr(struct sockSwiftaddr ssa)
28 struct listsockaddr lsa;
31 lsa.N = ssa.sin_addr.N;
33 for ( i = 0; i < lsa.N; i++) {
34 lsa.sa[i].sin_family = ssa.sin_family;
35 lsa.sa[i].sin_port = ssa.sin_port;
36 lsa.sa[i].sin_addr.s_addr = ssa.sin_addr.s_addr[i];
42 int listenfromSwift (Swift s, void *buf, size_t len, int flags,
43 struct sockSwiftaddr * __restrict__ from, socklen_t *fromlen)
45 struct sockaddr s_other;
46 struct listsockaddr lsa;
47 socklen_t slen=sizeof(s_other);
49 Dprintf("wait to receive messages");
51 int rec = recvfrom(s->socketListener, buf, len, flags,
52 (struct sockaddr * __restrict__)&s_other, &slen);
55 memcpy(&lsa.sa[0], &s_other, sizeof(s_other));
58 *from = transformFromAddrToSwift(lsa);
63 int bindSwift(Swift s, const struct sockSwiftaddr *my_addr, socklen_t addrlen)
65 Dprintf("bind swift socket");
66 return bind(s->socketListener,
67 (const struct sockaddr *)&s->socketListenerAddr,
68 sizeof(s->socketListenerAddr));
73 Dprintf("create swift socket");
74 Swift s = calloc(1,sizeof(*s));
76 Dprintf("create swift listener");
77 CHECK(s->socketListener = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP));
79 memset((char *) &s->socketListenerAddr, 0, sizeof(s->socketListenerAddr));
81 s->socketListenerAddr.sin_family = AF_INET;
82 s->socketListenerAddr.sin_port = htons(SWIFT_PORT);
83 s->socketListenerAddr.sin_addr.s_addr = htonl(INADDR_ANY);
88 void closeSwift(Swift s)
90 Dprintf("close swift socket");
91 close(s->socketListener);