I have quite an embarrassing problem. The following code simply will not create a socket on Windows; it fails and displays the error message. Could anyone briefly explain why th
Jerry Coffin is right about WSAStartup()
and WSACleanup()
.
Also note that this code
if( (sock = socket(AF_INET, SOCK_STREAM, 0)) < 0 )
is problematic because SOCKET
is an unsigned type (unsigned int
).
From winsock.h
/*
* This is used instead of -1, since the
* SOCKET type is unsigned.
*/
#define INVALID_SOCKET (SOCKET)(~0)
#define SOCKET_ERROR (-1)
So, IMO it's better to replace that line with
if( INVALID_SOCKET == (sock = socket(AF_INET, SOCK_STREAM, 0)) )
even if it's not the root cause.