2024-11-24 15:19:14
Socket函数用于创建一个绑定到特定服务提供商的套接字。此函数的原型为:
参数说明:
返回值:如果没有错误,返回一个引用新套接字的描述符。如果出现错误,将返回INVALID_SOCKET,可以通过WSAGetLastError获取特定错误代码。
常见的错误代码及其含义:
套接字函数会分配并绑定到特定的传输-服务提供商。Windows Sockets会使用支持请求的地址族、套接字类型和协议组合的第一个可用服务提供商。创建的套接字默认具有重叠属性。在Microsoft操作系统中,可以使用Mswsock.h中定义的特定于Microsoft的套接字选项SO_OPENTYPE影响这一默认行为,具体请参考Microsoft文档。
没有重叠属性的套接字可以通过WSASocket创建。支持重叠操作的函数(如WSASend、WSARecv等)也支持在重叠套接字上进行非重叠操作,只要与重叠操作相关的参数值为NULL。
在选择协议和服务提供者时,仅会选择基础协议或协议链,而不是单独的协议层。未链接的协议层不会被视为类型或af的匹配部分,即使找不到合适的协议也不会导致WSAEAFNOSUPPORT或WSAEPROTONOSUPPORT错误。
重要提示:虽然AF_UNSPEC常量继续在头文件中定义,但不建议使用,因为它可能导致协议参数值的解析不明确。
面向连接的套接字(如SOCK_STREAM)如TCP,需要处于连接状态才能发送或接收数据。通过connect调用建立与另一个套接字的连接后,使用send和recv进行数据传输。当会话结束时,需要调用closesocket。
面向消息的无连接套接字(如SOCK_DGRAM)支持向任意对端发送和接收数据报,分别使用sendto和recvfrom。若与特定对端连接,可以使用send向其发送数据报,而仅能通过recv从该对端接收。
服务提供商鼓励支持SOCK_RAW类型的套接字,但并非强制要求。对于红外数据自动识别(IrDA)套接字,需明确包含Af_irda.h头文件,仅支持SOCK_STREAM类型,协议参数始终为0。在Windows NT上,raw套接字支持需要管理员权限。
兼容性要求:Windows NT/2000/XP:从Windows NT 3.1及更高版本开始支持。Windows 95/98/Me:从Windows 95及更高版本开始支持。
头文件:在Winsock2.h中声明。
库:使用Ws2_32.lib。
更多信息请查阅:Windows Sockets编程概述、套接字函数、accept、bind、connect、getsockname、getsockopt、ioctlsocket、listen、recv、recvfrom、select、send、sendto、setsockopt、shutdown、WSASocket等。