extract server code into separared file
authorLaurent Mazet <mazet@softndesign.org>
Tue, 9 May 2023 11:55:07 +0000 (13:55 +0200)
committerLaurent Mazet <mazet@softndesign.org>
Tue, 9 May 2023 11:55:07 +0000 (13:55 +0200)
server.c [new file with mode: 0644]
server.h [new file with mode: 0644]
webserver.c

diff --git a/server.c b/server.c
new file mode 100644 (file)
index 0000000..0a50df1
--- /dev/null
+++ b/server.c
@@ -0,0 +1,104 @@
+/* depend: */
+/* cflags: */
+/* linker: color.o debug.o */
+
+#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+#ifdef _WIN32 /* Windows */
+#include <winsock2.h>
+#include <ws2tcpip.h>
+#else /* Posix */
+#include <errno.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <netinet/ip.h>
+#include <netinet/tcp.h>
+//#include <sys/types.h>
+//#include <sys/socket.h>
+#endif
+
+#include "debug.h"
+
+#include "server.h"
+
+/* types */
+
+#ifdef _WIN32 /* Windows */
+typedef SOCKET socket_t;
+#define PF_INET AF_INET
+#define ERRNO (WSAGetLastError ())
+#else /* Posix */
+typedef int socket_t;
+#define closesocket close
+#define ERRNO errno
+#define INVALID_SOCKET -1
+#define SOCKET_ERROR -1
+#endif
+
+/* constants */
+
+#define BUFFER_SIZE 4096
+
+/* macros */
+
+/* gobal variables */
+
+/* open listening socket */
+
+socket_t open_listening_socket (int port)
+{
+#ifdef _WIN32 /* Windows */
+    WSADATA WSAData;
+    WSAStartup (MAKEWORD(2,0), &WSAData);
+    assert (INVALID_SOCKET == (socket_t)-1);
+    assert (SOCKET_ERROR == (socket_t)-1);
+#endif
+
+    VERBOSE (DEBUG, fprintf (stdout, "Opening socket\n"));
+    socket_t sock = socket (PF_INET, SOCK_STREAM, IPPROTO_TCP);
+    if ((sock == INVALID_SOCKET) || (sock < 0))
+        return -1;
+
+    struct sockaddr_in addr = {0};
+    addr.sin_family = PF_INET;
+    addr.sin_port = htons (port);
+    addr.sin_addr.s_addr = htonl (INADDR_ANY);
+
+    VERBOSE (DEBUG, fprintf (stdout, "Binding socket\n"));
+    int rc = bind (sock, (struct sockaddr *)&addr, sizeof (addr));
+    if ((rc == SOCKET_ERROR) || (rc < 0)) {
+        VERBOSE (ERROR, fprintf (stderr, "error: %d\n", ERRNO));
+        rc = closesocket (sock);
+        if ((rc == SOCKET_ERROR) || (rc < 0)) {
+            VERBOSE (ERROR, fprintf (stderr, "error: %d\n", ERRNO));
+        }
+        return -1;
+    }
+
+    VERBOSE (DEBUG, fprintf (stdout, "Configuring socket\n"));
+#ifdef _WIN32 /* Windows */
+#else /* Posix */
+    fcntl (sock, F_SETFL, O_NONBLOCK);
+#endif
+    int val = 1;
+    rc = setsockopt (sock, IPPROTO_TCP, TCP_NODELAY, (char *)&val, sizeof (val));
+    if (rc < 0) {
+        VERBOSE (ERROR, fprintf (stderr, "%s\n", "setsockopt/TCP_NODELAY"));
+        closesocket (sock);
+        return -1;
+    }
+
+    return sock;
+}
+
+/* close listening socket */
+void close_listening_socket (socket_t sock)
+{
+    closesocket (sock);
+#ifdef _WIN32 /* Windows */
+    WSACleanup ();
+#endif
+}
+
+/* vim: set ts=4 sw=4 et: */
diff --git a/server.h b/server.h
new file mode 100644 (file)
index 0000000..962cb00
--- /dev/null
+++ b/server.h
@@ -0,0 +1,16 @@
+#ifndef __SERVER_H__
+#define __SERVER_H__
+
+#ifdef _WIN32 /* Windows */
+#include <ws2tcpip.h>
+typedef SOCKET socket_t;
+#else /* Posix */
+typedef int socket_t;
+#endif
+
+socket_t open_listening_socket (int port);
+void close_listening_socket (socket_t sock);
+
+#endif /* __SERVER_H__ */
+
+/* vim: set ts=4 sw=4 et: */
index 530f1aadf9aa46f9e8a98a54e231b661178ffa23..0673b9cf2190329426c4c3b465d1ed84c8b3820e 100644 (file)
@@ -1,33 +1,16 @@
 /* depend: */
 /* cflags: */
-/* linker: color.o debug.o */
+/* linker: color.o debug.o server.o */
 
 #include <assert.h>
 #include <stdio.h>
 #include <stdlib.h>
-#ifdef _WIN32 /* Windows */
-#include <winsock2.h>
-#include <ws2tcpip.h>
-#else /* Posix */
-#include <errno.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <netinet/ip.h>
-#include <netinet/tcp.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#endif
 
 #include "debug.h"
+#include "server.h"
 
 /* types */
 
-#ifdef _WIN32 /* Windows */
-typedef SOCKET socket_t;
-#else /* Posix */
-typedef int socket_t;
-#endif
-
 /* constants */
 
 #define BUFFER_SIZE 4096
@@ -52,83 +35,6 @@ int usage (int ret)
     return ret;
 }
 
-/* open listening socket */
-
-socket_t open_listening_socket (int port)
-{
-#ifdef _WIN32 /* Windows */
-    WSADATA WSAData;
-    WSAStartup (MAKEWORD(2,0), &WSAData);
-    assert (INVALID_SOCKET == (socket_t)-1);
-#endif
-
-    VERBOSE (DEBUG, fprintf (stdout, "Opening socket\n"));
-#ifdef _WIN32 /* Windows */
-    socket_t sock = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP);
-    if (sock == INVALID_SOCKET)
-        return -1;
-#else /* Posix */
-    socket_t sock = socket (PF_INET, SOCK_STREAM, IPPROTO_TCP);
-    if (sock < 0)
-        return -1;
-#endif
-
-    struct sockaddr_in addr = {0};
-#ifdef _WIN32 /* Windows */
-    addr.sin_family = AF_INET;
-#else /* Posix */
-    addr.sin_family = PF_INET;
-#endif
-    addr.sin_port = htons (port);
-    addr.sin_addr.s_addr = htonl (INADDR_ANY);
-
-    VERBOSE (DEBUG, fprintf (stdout, "Binding socket\n"));
-    int rc = bind (sock, (struct sockaddr *)&addr, sizeof (addr));
-#ifdef _WIN32 /* Windows */
-    if (rc == SOCKET_ERROR) {
-        VERBOSE (ERROR, fprintf (stderr, "error: %d\n", WSAGetLastError ()));
-        if (closesocket (sock) == SOCKET_ERROR) {
-            VERBOSE (ERROR, fprintf (stderr, "error: %d\n", WSAGetLastError ()));
-        }
-#else /* Posix */
-    if (rc < 0) {
-        VERBOSE (ERROR, fprintf (stderr, "error: %d\n", errno));
-        close (sock);
-#endif
-        return -1;
-    }
-
-    VERBOSE (DEBUG, fprintf (stdout, "Configuring socket\n"));
-#ifdef _WIN32 /* Windows */
-#else /* Posix */
-    fcntl (sock, F_SETFL, O_NONBLOCK);
-#endif
-    int val = 1;
-    rc = setsockopt (sock, IPPROTO_TCP, TCP_NODELAY, (char *)&val, sizeof (val));
-    if (rc < 0) {
-        VERBOSE (ERROR, fprintf (stderr, "%s\n", "setsockopt/TCP_NODELAY"));
-#ifdef _WIN32 /* Windows */
-        closesocket (sock);
-#else /* Posix */
-        close (sock);
-#endif
-        return -1;
-    }
-
-    return sock;
-}
-
-/* close listening socket */
-void close_listening_socket (socket_t sock)
-{
-#ifdef _WIN32 /* Windows */
-    closesocket (sock);
-    WSACleanup ();
-#else /* Posix */
-    close (sock);
-#endif
-}
-
 /* main function */
 
 int main (int argc, char *argv[])