Fixed ARM build
[ZeXOS.git] / tools / znfsd / net.c
blobc4e55dcaf84a83732d9332b1b03fe67ec0e8ddba
1 #include <stdio.h>
2 #include <fcntl.h>
3 #include <stdlib.h>
4 #include <unistd.h>
5 #include <sys/socket.h>
6 #include <arpa/inet.h>
7 #include "client.h"
9 int mainsocket;
10 struct sockaddr_in sockserver;
11 struct sockaddr_in sockclient;
12 socklen_t addrlen;
13 char buffer[1530];
15 extern client_t client_list;
17 int net_send (int fd, char *str, unsigned len)
19 int oldFlag = fcntl (fd, F_GETFL, 0);
20 if (fcntl (fd, F_SETFL, oldFlag & ~O_NONBLOCK) == -1) {
21 printf ("Cant set socket to blocking mode\n");
22 return 0;
25 int ret = send (fd, str, len, 0);
27 oldFlag = fcntl (fd, F_GETFL, 0);
28 if (fcntl (fd, F_SETFL, oldFlag | O_NONBLOCK) == -1) {
29 printf ("Cant set socket to nonblocking mode\n");
30 return 0;
33 return ret;
36 int net_accept ()
38 int newfd = accept (mainsocket, (struct sockaddr *) &sockclient, &addrlen);
40 if (newfd > 0) {
41 printf ("> New client connected fd (%d) - %s\n", newfd, inet_ntoa (sockclient.sin_addr));
43 client_add (newfd);
45 return newfd;
48 return 0;
51 int net_loop ()
53 net_accept ();
55 client_t *c;
56 for (c = client_list.next; c != &client_list; c = c->next) {
57 if (!c)
58 continue;
60 int ret = recv (c->fd, buffer, 1500, 0);
62 if (ret > 0)
63 if (!client_handle (c, buffer, ret))
64 break;
67 return 1;
70 int net_init ()
72 int port = 5333;
74 if ((mainsocket = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) {
75 printf ("Cant create socket\n");
76 return -1;
79 // 1) Family of protocols
80 sockserver.sin_family = AF_INET;
81 // 2) Set number of listen port
82 sockserver.sin_port = htons (port);
83 // 3) Listen IP address
84 sockserver.sin_addr.s_addr = INADDR_ANY;
86 unsigned long yes = 1;
87 setsockopt (mainsocket, SOL_SOCKET, SO_REUSEADDR, (char *) &yes, sizeof (yes));
89 // Bind on our socket
90 if (bind (mainsocket, (struct sockaddr *) &sockserver, sizeof (sockserver)) == -1) {
91 printf ("bind () - port is used\n");
92 return -1;
95 // Create queue for accept
96 if (listen (mainsocket, 10) == -1) {
97 printf ("ERROR -> listen () == -1\n");
98 return -1;
101 // set mainSocket to non-blocking mode
102 int oldFlag = fcntl (mainsocket, F_GETFL, 0);
103 if (fcntl (mainsocket, F_SETFL, oldFlag | O_NONBLOCK) == -1) {
104 printf ("Cant set socket to nonblocking mode\n");
105 return 0;
108 return 1;