-/* 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 (socket < 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 (socket < 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
-}
-