Deadwood's sockets are a mixture of *NIX and Windows sockets in the code, with macros in DwSocket.h changing the code to look like the appropriate *NIX or Win32 code. Here is the general coding style: * Sockets are declared as a SOCKET, not as an int. Instead of "int some_socket;", use "SOCKET some_socket;". The macros make SOCKET an int in the *NIX compile of the code. * An invalid socket has the value INVALID_SOCKET, not -1. Instead of "foo = socket(AF_INET,SOCK_STREAM,0); if(foo == -1)...", do "foo = socket(yadda yadda yadda); if(foo == INVALID_SOCKET)..." The macros make INVALID_SOCKET -1 for the *NIX code. * Don't use errno to find out what a given error is; use the macro SCKT_ERR instead. The only error macro you can count on working is EINPROGRESS. * Winsock doesn't have fcntl. I have a macro that does either the *NIX or Windows version of "fcntl(foo,F_SETFL,O_NONBLOCK)" that looks like "make_socket_nonblock(foo)", and needs, in the Windows code, a u_long variable called dont_block (this is declared in DwSocket.c, and as an external in DwTcpSocket.c and DwUdpSocket.c) * Don't do "close(socket)"; do "closesocket(socket)" instead. I have a macro for the *NIX code that simply makes this close(). * Don't read() or write() on a socket; *always* recv() or send() on a socket, otherwise the code won't work in Windows. * inet_pton() doesn't exist in Winsock, so I have written a wrapper function that uses inet_addr() and looks like inet_pton(). Make sure any usage of inet_pton() is compatible with this wrapper function. * The build environment I am using in Windows, MinGW, doesn't have IPv6 support. Make sure any IPv6 code is inside "#ifdef IPV6" conditionals.