3 /* linker: color.o debug.o */
8 #ifdef _WIN32 /* Windows */
15 #include <netinet/ip.h>
16 #include <netinet/tcp.h>
17 //#include <sys/types.h>
18 //#include <sys/socket.h>
27 #ifdef _WIN32 /* Windows */
28 typedef SOCKET socket_t
;
29 #define PF_INET AF_INET
30 #define ERRNO (WSAGetLastError ())
33 #define closesocket close
35 #define INVALID_SOCKET -1
36 #define SOCKET_ERROR -1
41 #define BUFFER_SIZE 4096
47 /* open listening socket */
49 socket_t
open_listening_socket (int port
)
51 #ifdef _WIN32 /* Windows */
53 WSAStartup (MAKEWORD(2,0), &WSAData
);
54 assert (INVALID_SOCKET
== (socket_t
)-1);
55 assert (SOCKET_ERROR
== -1);
58 VERBOSE (DEBUG
, fprintf (stdout
, "Opening socket\n"));
59 socket_t sock
= socket (PF_INET
, SOCK_STREAM
, IPPROTO_TCP
);
60 if (sock
== INVALID_SOCKET
) {
64 struct sockaddr_in addr
= {0};
65 addr
.sin_family
= PF_INET
;
66 addr
.sin_port
= htons (port
);
67 addr
.sin_addr
.s_addr
= htonl (INADDR_ANY
);
69 VERBOSE (DEBUG
, fprintf (stdout
, "Binding socket\n"));
70 int rc
= bind (sock
, (struct sockaddr
*)&addr
, sizeof (addr
));
71 if (rc
== SOCKET_ERROR
) {
72 VERBOSE (ERROR
, fprintf (stderr
, "error: %d\n", ERRNO
));
73 rc
= closesocket (sock
);
74 if (rc
== SOCKET_ERROR
) {
75 VERBOSE (ERROR
, fprintf (stderr
, "error: %d\n", ERRNO
));
80 VERBOSE (DEBUG
, fprintf (stdout
, "Configuring socket\n"));
81 #ifndef _WIN32 /* Posix */
82 fcntl (sock
, F_SETFL
, O_NONBLOCK
);
85 rc
= setsockopt (sock
, IPPROTO_TCP
, TCP_NODELAY
, (char *)&val
, sizeof (val
));
87 VERBOSE (ERROR
, fprintf (stderr
, "%s\n", "setsockopt/TCP_NODELAY"));
89 if (rc
== SOCKET_ERROR
) {
90 VERBOSE (ERROR
, fprintf (stderr
, "error: %d\n", ERRNO
));
98 /* close listening socket */
99 void close_listening_socket (socket_t sock
)
101 int rc
= closesocket (sock
);
102 if (rc
== SOCKET_ERROR
) {
103 VERBOSE (ERROR
, fprintf (stderr
, "error: %d\n", ERRNO
));
105 #ifdef _WIN32 /* Windows */
110 /* vim: set ts=4 sw=4 et: */