socket()函数实现创建套接字的功能。当创建套接字时,需要向该函数传递“地址家族”、“套接字类型”和“协议类型”三个参数。Windows Socket定义AF_INET为IP地址家族,所以该函数的第一个参数必须为AF_INET。该程序用TCP协议打开套接字,所以设置第二个参数为SOCK_STREAM。第三个参数为协议类型,设置为IPPROTO_TCP。在第一个和第二个参数确定的情况下,第三个参数可以设置为0。
通常Windows Sockets API调用失败时返回SOCKET_ERROR错误代码。但该函数调用失败时,返回INVALID_SOCKET错误代码。
创建套接字的程序清单如下。
sServer= socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(INVALID_SOCKET == sServer)
{
return HandleSocketError("Failed socket()!");
}
套接字SOCKET定义为无符号的整数,可以取从0到INVALID_SOCKET-1之间的任意值。SOCKET_ERROR和SOCKET_ERROR的定义如下。
#define INVALID_SOCKET (SOCKET)(~0)
#define SOCKET_ERROR (-1)
当该函数调用失败时,调用HandleSocketError()函数显示调用失败的消息。然后,卸载Windows Sockets DLL,释放内存,程序退出。该函数程序清单如下。
/*
* 错误处理
*/
int HandleSocketError(char *str)
{
ShowSocketMsg(str); //显示错误消息
WSACleanup(); //卸载Windows socket DLL
return SERVER_API_ERROR; //退出应用程序
}
转自:http://blog.youkuaiyun.com/VCSockets/article/details/2393437