INVALID_SOCKET的值

 (2011-06-26 15:06:45)

标签: 

杂谈

 
INVALID_SOCKET的值不是-1,原因参考basetsd.h和WinSock2.h:

 

 

typedef _W64 unsigned int UINT_PTR, *PUINT_PTR;

typedef UINT_PTR        SOCKET;

#define INVALID_SOCKET  (SOCKET)(~0)

 

(~0)的值为-1;

(SOCKET)(~0)的值为:十六进制0xFFFFFFFF(十进制4294967295)。

To abort a connection, release a socket handle, and discard data pending for writing, do:

closesocket(sock);
sock = INVALID_SOCKET; // do not make further use of sock.

To flush a sock handle, gracefully close the socket, and release the socket handle in the
background:

DisconnectEx(sock, NULL, 0, 0); // retrieve this function pointer with WSAIoctl(WSAID_DISCONNECTEX).
closesocket(sock);
sock = INVALID_SOCKET; // do not make further use of sock.

 

 

 

http://msdn.microsoft.com/en-us/library/ms737582(VS.85).aspx