- VERBOSE (DEBUG, fprintf (stdout, "Opening socket\n"));
- socket_t sock = socket (PF_INET, SOCK_STREAM, IPPROTO_TCP);
- if (sock == INVALID_SOCKET) {
- return -1;
+#ifndef _WIN32 /* Posix */
+ signal (SIGINT, &stop_server);
+#endif
+ signal (SIGABRT, &stop_server);
+ signal (SIGSEGV, &stop_server);
+ signal (SIGTERM, &stop_server);
+}
+
+/* terminate network context */
+
+void _closesocket (socket_t sock)
+{
+ if (sock != INVALID_SOCKET) {
+ int rc = closesocket (sock);
+ if (rc == SOCKET_ERROR) {
+ VERBOSE (ERROR, PERROR ("error: close %d\n", ERRNO));
+ }
+ }
+}
+
+void terminate_network_context (void)
+{
+ _closesocket (sock);
+ _closesocket (conn);
+#ifdef _WIN32 /* Windows */
+ WSACleanup ();
+#endif
+}
+
+/* open listening socket */
+
+int open_listening_socket (int port)
+{
+ int val = 1;
+
+ VERBOSE (DEBUG, PRINT ("Opening socket\n"));
+ //socket_t sock = socket (PF_INET, SOCK_STREAM, IPPROTO_TCP);
+ _closesocket (sock);
+ socket_t _sock = socket (AF_INET, SOCK_STREAM, 0);
+ if (_sock == INVALID_SOCKET) {
+ return 0;