Джерри Гроб прав насчет WSAStartup()
и WSACleanup()
.
Также обратите внимание, что этот код
if( (sock = socket(AF_INET, SOCK_STREAM, 0)) < 0 )
проблематично, потому что SOCKET
- это тип без знака (unsigned int
).
С winsock.h
/*
* This is used instead of -1, since the
* SOCKET type is unsigned.
*/
#define INVALID_SOCKET (SOCKET)(~0)
#define SOCKET_ERROR (-1)
Итак, ИМО, лучше заменить эту строку на
if( INVALID_SOCKET == (sock = socket(AF_INET, SOCK_STREAM, 0)) )
, даже если это не основная причина.