implements first function (recv, bind, socket, close)
[swifty.git] / src / lib_swift.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4
5 #include <arpa/inet.h>
6 #include <netinet/in.h>
7 #include <sys/types.h>
8 #include <sys/socket.h>
9 #include <unistd.h>
10
11 #include "lib_swift.h"
12
13 ssize_t recvfrom(int s, void *buf, size_t len, int flags,
14                  struct sockaddr *from, socklen_t *fromlen);
15
16 int recvfromSwift (Swift s, void *buf, size_t len, int flags,
17                  struct sockaddr * __restrict__ from, socklen_t *fromlen)
18 {
19         struct sockaddr_in si_other;
20         socklen_t slen=sizeof(si_other);
21
22         Dprintf("wait to receive messages");
23         return recvfrom(s->socketListener, buf, len, flags,
24                 from, &slen);
25 }
26
27 int bindSwift(Swift s, const struct sockaddr *my_addr, socklen_t addrlen)
28 {
29         Dprintf("bind swift socket");
30         return bind(s->socketListener, 
31                 (const struct sockaddr *)&s->socketListenerAddr,
32                 sizeof(s->socketListenerAddr));
33 }
34
35 Swift socketSwift()
36 {
37         Dprintf("create swift socket"); 
38         Swift s = calloc(1,sizeof(*s));
39
40         Dprintf("create swift listener");       
41         CHECK(s->socketListener = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP));
42
43         memset((char *) &s->socketListenerAddr, 0, sizeof(s->socketListenerAddr));
44         
45         s->socketListenerAddr.sin_family = AF_INET;
46         s->socketListenerAddr.sin_port = htons(SWIFT_PORT);
47         s->socketListenerAddr.sin_addr.s_addr = htonl(INADDR_ANY);
48         
49         return s;
50 }
51
52 void closeSwift(Swift s)
53 {
54         Dprintf("close swift socket");
55         close(s->socketListener);
56         
57         free(s);
58 }