scoket函数

高分请问下,scoket函数
最新回答
白首有我共你

2024-11-24 15:19:14

Socket函数用于创建一个绑定到特定服务提供商的套接字。此函数的原型为:



SOCKET socket(
int af,
int type,
int protocol
);

参数说明:



  • af:地址族规范,如IPv4(AF_INET)或IPv6(AF_INET6)。

  • type:新套接字的类型,Windows Sockets 1.1支持以下两种类型:


    • SOCK_STREAM:提供有序、可靠的双向连接字节流,支持外在数据传输机制,使用TCP(互联网地址族)。

    • SOCK_DGRAM:支持无连接、不可靠的数据报,固定长度(通常较小),使用UDP(互联网地址族)。


  • protocol:与指定地址族相关的要使用的协议。


返回值:如果没有错误,返回一个引用新套接字的描述符。如果出现错误,将返回INVALID_SOCKET,可以通过WSAGetLastError获取特定错误代码。


常见的错误代码及其含义:



  • WSANOTINITIALISED:在使用此函数前,必须先调用WSAStartup。

  • WSAE*错误代码(如WSAEAFNOSUPPORT、WSAEINPROGRESS等):表示各种网络问题或操作正在进行中。


套接字函数会分配并绑定到特定的传输-服务提供商。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等。