¿Por qué se define un socket no válido como ~ 0 en WinSock2.h (c ++)?

En WinSock2.h, el socket inválido y el error de socket se definen como estos? ¿Hay algún significado para esto?

#define INVALID_SOCKET  (SOCKET)(~0)
#define SOCKET_ERROR            (-1)