WSAIoctl Function

学习提速专享!AI工具全家桶免费用 限时购周边加赠Coding Plan Lite,解锁20+主流AI工具,写代码、查资料快人一步! 阅读详情


套接字选项和I/O控制命令

 

   套接字一旦建立,通过套接字选项和I/O控制命令对各种属性进行操作,便可对套接字的行为产生影响。有的选项只用于信息的返回,而有的选项则可在应用程序中影响套接字的行为。I / O控制命令肯定会对套接字的行为产生影响。


   下 面着重讨论四个Winsock函数:getsockopt、setsocketopt、ioctlsocket和WSAIoctl 。每个函数都有大量命 令。这些I/O控制命令和选项大多定义在Winsock.h或Winsock2.h内,具体取决于它们到底从属于Winsock 1,还是从属于Winsock 2。但是,也有少数几个选项是Microsoft提供者或某种传输协议所特有的。微软特有的一些扩展定义在Winsock.h和Mswsock.h 这两个 头文件内。而传输提供者扩展定义在与其协议对应的头文件内。针对那些传输特有选项,我们将随选项一道,指明正确的头文件是什么。要注意的是,若应用程序使 用了微软特有的扩展,那么必须同Mswock.lib建立链接。

 

   套接字选项

 

   对getsocketopt(获得套接字选项)函数来说,它的常见用法是获得与指定套接字相关的信息。

    其原型如下:

    int getsocketopt(SOCKKET s,int level,int optname,char FAR* optval,int optlen)

    s 指定的是一个套接字,我们打算在这个套接字上执行指定的选项。对你打算使用的具体协议来说,这个套接必须是有效的。大多数选项都是一种特定的协议和套接字 类型专有的,而其他选项适用于所有类型的套接字(特别是第二个参数level)。

    optname参数是我们在此真正感兴趣的选项。 这些选项名均在 Winsock头文件内定义的常数值。最常见的与协议无关选项(比如和SOL_SOCKET级别关联在一起的选项)是在Winsock.h和 Winsock2.h这两个头文件中定义的。对于每种特定的协议来说,它们都有自己的头文件,定义了与之对应的特定选项。

   最后,optval和 optlen参数是两个变量,用于返回目标选项的值 。大多数情况下,选项值都是一个整数(但也不是绝对的)


.

   setsocketopt函数用于在一个套接字级别或由协议决定的级别上设置套接字选项。它的定义如下:

   int setsocketopt(SOCKKET s,int level,int optname,const char FAR* optval,int optlen)

   它 的参数和getsocketopt函数的参数相同,例外的是我们以optval和optlen参数的形式,将值传递进去。这些值是为指定的选项设定的。和 getsocketopt函数一样,optval大多数时候都是一个整数,但也并非总是如此。正式编程的时候,应查询对每个选项的说明,了解到底该将什么 作为选值传递进去。调用getsocketopt或setsocketopt时,最常见的错误是试图获得一个套接字的信息,但那个套接字的基层协议却不具 备某种指定的特征(或选项)。例如,类型为SOCK_STREAM的一个套接字本身是不能对数据进行广播操作的;因此,若试图设置或获取 SO_BROADCAST选项,便会造成WSAENOPRORTOOPT错误。

 

 

 

 

SOL_SOCKET选项级别

介绍可根据套接字本身的特征,返回信息的一些套接字选项,但这些信息并非那个

套接字的基层协议所特有的(与它无关).

选项级别值

选项值

类型获取 / 设置

Winsock 版本

说明

SO_ACCEPTCONN

布尔值

只能获取

1 +

如为TRUE(真),表明套接字处于监听模式

SO_BROADCAST

布尔值

两种均可

1 +

如为TRUE,表明套接字已配置成对广播消息进行发送

SO_CONNECT_TIME

整数

只能获取

1 +

返回套接字建立连接的时间,以秒为单位

SO_DEBUG

布尔值

两种均可

1 +

如果是TRUE,就允许调试输出

SO_DONTLINGER

布尔值

两种均可

1 +

如果是T R U E,则禁用SO_LINGER

SO_DONTROUTE

布尔值

两种均可

1 +

如果是T R U E,便直接向网络接口发送消息,毋需查询路由表

SO_ERROR

布尔值

只能获得

1 +

返回错误状态

SO_EXCLUSIVEADDRUSE

布尔值

两种均可

2 +

如果是TRUE,套接字绑定的那个本地端口就不能重新被另一个进程使用

SO_KEEPALIVE

布尔值

两种均可

1 +

如果是T R U E,套接字就会进行配置,在会话过程中发送“保持活动”消息

SO_LINGER

st ruct linger

两种均可

1 +

设置或获取当前的拖延

SO_MAX_MSG_SIZE

无符号整数

只能获得

2 +

对一个面向消息的套接字来说,一条消息的最大长度

SO_OOBINLINE

布尔值

两种均可

1 +

如果是T R U E,带外数据就会在普通数据流中返回

SO_PROTOCOL_INF O

WSAPROTOCOL_INFO

只能获得

2 +

套接字绑定的那种协议的特征

SO_RCVBUF

整数

两种均可

1 +

面向接收操作,为每个套接字分别获取或设置缓冲区长度

SO_REUSEADDR

布尔值

两种均可

1 +

如果是TRUE,套接字就可与一个正由其他套接字使用的地址绑定到一起,或与处在TIME_WAIT状态的地址绑定到一起

SO_SNDBUF

布尔值

两种均可

1 +

如果是TRUE(非零值),意味着套接字被配置成可进行广播消息的发送

SO_TYPE

整数

只能获得

1 +

返回指定套接字的类型(如SOCK_DGRAM和SOCK_STREAM等)

SO_SNDTIMEO

整数

两种均可

1 +

获取或设置套接字上的数据发送超时时间(以毫秒为单位)

SO_RCVTIMEO

整数

两种均可

1 +

获取或设置与套接字上数据接收对应的超时时间值(以毫

秒为单位)

SO_UPDATE_ACCEPT_CONTEXT

S O C K E T

两种均可

1 +

获取或设置与套接字上的数据接收对应的超时值(以毫秒计)

SOL_APPLETALK选项级别

  下述选项均为AppleTalk协议之专用套接字选项,只能用于通过socket或WSASocket函数

创建的套接字(同时设置AF_APPLETALK标志)。这里列出的大多数选项都与A ppleTalk名字

的设置或获取有关。

选项级别值

选项值

类型获取 / 设置

Winsock 版本

说明

SO_CONFIRM_NAM

WSH_NBP_TUPLE

只能获得

1

确定指定的AppleTalk名字和指定地址绑定在一起

SO_DEREGISTER_NAME SO_REMOVE_NAME

WSH_REGISTER_NAME

只能设置

1

从网络中撤消对指定名字的注册

SO_LOOKUP_MYZONE

SO_GETMYZONE

字符

只能获取

1

返回网络上的默认网区

SO_LOOKUP_NAME

W SH_LOOKUP_NAME

只能获取

1

查找指定的NBP名字,并返回相符的名字及N B P信息字元组

SO_LOOKUP_ZONES

SO_GETZONELIST

WSH_LOOKUP_ZONES

只能获取

1

返回来自Internet网区列表的区名

SO_LOOKUP_ZONES_ON_ADAPTER SO_GETLOCALZONES

WSH_LOOKUP_ZONES

只能获取

1

为指定的适配器名返回一个区名列表

SO_LOOKUP_NETDEF_ON_ADAPTER SO_GETNETINFO

WSH_LOOKUP_NETDEF_ON_ADAPTE

只能设置

1

为指定网络返回种子值,以及默

认网区

 

SO_PAP_GET_SERVER_STATUS

WSH_PAP_GET_SERVER_STATUS

只能获取

1

自指定服务器返回PA P状态

 

SO_PAP_PR IME_READ

char []

只能设置

1

这个调用会在一个PA P连接上填充一次读取操作,以便发送者能实际地发出数据

SO_PAP_S ET_SERV ER_STTUS

char []

只能设置

1

假如另一个客户机请求状态,则设置要发送出去的状态

 

SO_REGISTER_NAME

char []

只能设置

1

AppleTalk网络上注册指定的名字

 

 

SOL_IRLMP选项级别

SOL_IRLMP 级别与IrDA(Infrared Data Association,红外线数据联盟)协议有着密切的联系,其地址家族为AF_IRDA。使用IrDA套接字选项时,要记住的一个要点在于,在不同平 台上,红外线套接字的具体实施方式是有所区别的。由于Windows CE是最早支持红外线通信的一个平台,所以没有包括后来在Windows 98和Windows 2000中引入的一些新选项。

选项级别值

选项值

类型获取 / 设置

Winsock 版本

说明

IRLMP_9WIRE_MODE

布尔值

两种均可

1 +

获取或设置IP头内的IP选项

IRLMP_ENUMDEVICES

DEVICELIST

只能获取

1 +

针对范围内具有红外线通信能力的设备,返回一个IrDA设备ID列表

IRLMP_EXECLUSIVE_MODE

布尔值

两种均可

1 +

如果是TRUE,表明套接字连接处于“独占”模式

IRLMP_IAS_QUERY

IAS-QUERY

只能获取

1 +

在指定服务上查询IAS,并查询与其属性对应的类名

IRLMP_IAS_SET

IAS-QUERY

只能获取

1 +

为指定的类名和属性设置一个属性值

IRLMP_IRLPT_MODE

布尔值

两种均可

1 +

若为T R U E,套接字就会配置成与具有I R能力的打印机通信

IRLMP_SEND_PDU_LEN

整数

只能获得

1 +

取得最大的PDU长度

 

IPPROTO_IP选项级

  IPPROTO_IP这一级的套接字选项与I P协议存在密切联系,比如可用它们IP头内的特定字

段,以及向IP多播组增添一个套接字等等。许多这样的选项都声明于Winsock.h和Winsock2.h

这两个头文件内,而且采用了不同的值。要注意的是,假如装载的是Winsock1,那么必须包

括正确的头文件,同时建立与Wsock32.lib 函数库的链接关系。若装载的是Winsock 2,那么情况也是类似的,除了将Winsock 2的头文件包括进来外,还要建立与Ws2_32.lib的链接关系。在多播通信环境中,这一点尤其重要,因为两个版本的Wi n s o c k均支持多播通信。除WindowsCE的早期版本之外,其他所有Win32平台都提供了对多播通信的支持。而Windows CE自2.1版之后,也开始提供了这方面的支持。

选项级别值

选项值

类型获取 / 设置

Winsock 版本

说明

IP_OPTIONS

char []

两者均可

1 +

设置或获取IP头内的IP选项

IP_HDRINCL

布尔值

两种均可

2 +

如果是TRUE,IP头就会随即将发送的数据一起提交,并从 读取的数据中返回

IP_TOS

整数

两种均可

1 +

IP服务类型

IP_TTL

整数

两种均可

1 +

IP协议的“存在时间”(TTL)参数

 

IP_MULTICAST_IF

无符号长整型

两种均可

1 +

获取或设置打算从它上面发出多播数据的本地接口

IP_MULTICAST_TTL

整数

两种均可

1 +

为套接字获取或设置多播数据包的存在时间

IP_MULTICAST_LOOP

布尔值

两种均可

1 +

如果是TRUE,发至多播地址的数据将原封不动地“反射”

或“反弹”回套接字的进入缓冲区

IP_ADD_MEMBERSHIP

struc ip_mreq

只能设置

1 +

在指定的IP组内为套接字赋予成员资格

IP_DROP_MEMBERSHIP

struc ip_mreq

只能设置

1 +

将套接字从指定的IP组内删去(撤消成员资格)

IP_DONTFRAGMENT

布尔值

两种均可

1 +

如果是T R U E,就不对I P数据报进行分段

IPPROTO_TCP选项级别

仅有一个选项从属于IPPROTO_TCP级别。该选项只适用于流式套接字(SOCK_STREAM),其地址家族为AF_INET。这个选项可用在所有Winsock版本上,并得到了所有Win32平台的支持,包括Windows CE。

TCP_NODELAY  布尔值    两者均可     1 +   若为TRUE,就会在套接字上禁用Nagle算法

NSPROTO_IPX选项级别

选项级别值

选项值

类型获取 / 设置

Winsock 版本

说明

IPX_PTYPE

整数

两种均可

1 +

获取或设置IPX包的类型

IPX_FILTERPTYPE

整数

两种均可

1 +

获取或设置准备过滤的I P X包之类型

IPX_STOPFILTERPTYPE

整数

只能设置

1 +

删除为指定IPX包设置的过滤器

IPX_DSTYPE

整数

两种均可

1 +

获取或设置SPX头中的数据流字段值

IPX_EXTENDED_ADDRESS

布尔值

两种均可

1 +

如果是TRUE,便允许对IPX包进行扩展定址

IPX_RECVHDR

布尔值

两种均可

1 +

如果是TRUE,就随接收调用一起,返回IPX头

IPX_MAXSIZE

整数

只能获取

1 +

返回IPX数据报的最大长度

IPX_ADDRESS

IPX_ADDRESS_D ATA

只能获取

1 +

返回具备IPX能力之适配器的有关信息

IPX_GETNE TINFO

IPX_NETNUM_D ATA

只能获取

1 +

返回与一个指定IPX网络编号有关的信息

IPX_GETNETINFO_NORIP

IPX_ADDRESS_DATA

两种均可

1 +

如果是TRUE,就不会对IP数据报进行分段

IPX_SPXGETCONNECTIONSTAT U S

IPX_SPXCONNSTATUS_DATA

只能获取

1 +

返回与一个已建立连接的SPX套接字有关的信息

IPX_ADDRESS_NOTIFY

I PX_ADDRESS_DATA

只能获取

1 +

IPX适配器的状态发生改变,则发出异步通知

IPX_MAX_ADAPTER_NUM

整数

只能获取

1 +

返回存在的IPX适配器个数

IPX_RERIPNETNUMBER

IPX_NETNUM_DATA

只能获取

1 +

返回一个网络编号的相关信息

IPX_RECEIVE_BROADCAST

布尔值

只能设置

1 +

如果是TRUE,就不接收IPX广播包

IPX_IMMEDITESPXZCK

布尔值

两种均可

1 +

如果是TRUE,就不在SPX连接上延迟发送ACK

 

I OCTLSOCKET和WSAIOCTL

  一系列套接字 I/O 控制函数用于在套接字之上,控制 I/O 的行为,同时获取与那个套接字上

进行的 I/O 操作有关的信息。


  其中,第一个函数是 ioctlsocket ,起源于 Winsock 1 规范,声明如下:

int olctlsocket(SOCKET s,long cmd,u_long FAR* argp)

其中,参数 s 指定的是要在上面采取 I/O 操作的套接字描述符,而 cmd 是一个预定义的标志,

用于打算执行的 I/O 控制命令。最后一个参数 argp 对应的是一个指针,指向与命令密切相关的一个变量。描述好每个命令之后,再给出要求变量的类型。



   Winsock 2 引入了一个新的 ioctl 函数,增添了数量多得多的新选项。首先,它将单个 argp 参数分解成了一系列输入参数,用于容纳传递到函数内部的值;同时提供一系列输出参数,用于容纳自调用返回的数据。此外,

函数调用可使用重叠 I/O 。这个新函数便是 WSAIoctl ,它的定义如下:

int WSAIoctl(SOCKET s,DWORD dwIoControlCode,LPVOID lpvInBuffer,DWORD cbInBuffer,

LPVOID lpvOutBuffer,DWORD cbOutBuffer,LPDWORD lpcbBytesReturned,

LPWSAOVERLAPPED lpOverlapped,

LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)

头两个参数与 ioctlsocket 的相同。另两个参数( lpvInBuffer cbInBuffer )则对输入参数

进行了描述。其中, lpvInBuffer 参数是一个指针,指向传递进入的值,而 cbInBufer 指定的是数据的多少,以字节为单位。类似地, lpvOutBuffer cbOutBuffer 用于自调用返回的任何数据。 l pvOutBuffer 参数指向的是一个数据缓冲区,其中放置了返回的所有信息。而 cbOutBuffer 参数对应的是在 lpvOutBuffer 中传递进来的缓冲区的字节长度。要注意的是,某些调用可能只使用了输入或输出参数,而另一些调用两类参数都会用到。第七个参数是 lpcbBytesReturned ,对应于实际返回的字节数。最后两个参数是 lpOverlapped lpCompletionRoutine ,在随重叠 I/O 调用这个函数时使用。

 


socket网络编程中设置socket选项的ioctlsocket、setsockopt和WSAIoctl函数的使用(附源码) 阅读详情

相关推荐

使用setsockopt和WSAIoctl函数进行编程

setsockopt函数和WSAIoctl函数是在网络编程中常用的函数,用于对套接字进行配置和控制。setsockopt函数和WSAIoctl函数是在网络编程中常用的函数,用于对套接字进行配置和控制。在上述示例中,首先创建了一个套接字,然后通过setsockopt函数设置了SO_REUSEADDR选项,使得该套接字可以重用之前绑定的地址。在上述示例中,首先创建了一个套接字,然后通过setsockopt函数设置了SO_REUSEADDR选项,使得该套接字可以重用之前绑定的地址。

ByteKnight的博客 175

高性能并发IOCP 网络编程

///////////////////////////////////////////////////////////////// // 初始化Socket bool CIOCPModel::_InitializeListenSocket() { // AcceptEx 和 GetAcceptExSockaddrs 的GUID,用于导出函数指针 GUID GuidAcceptEx = WSAID_ACCEPTEX; GUID GuidGetAcceptExSockAddrs = WSAID_GETACCEPTEXSOCKADDRS; // 服务器地址信息,用于绑定Socket struct sockaddr_in ServerAddress; // 生成用于监听的Socket的信息 m_pListenContext = new PER_SOCKET_CONTEXT; // 需要使用重叠IO,必须得使用WSASocket来建立Socket,才可以支持重叠IO操作 m_pListenContext->m_Socket = WSASocket(AF_INET, SOCK_STREAM, 0, NULL, 0, WSA_FLAG_OVERLAPPED); if (INVALID_SOCKET == m_pListenContext->m_Socket) { this->_ShowMessage("初始化Socket失败,错误代码: %d.\n", WSAGetLastError()); return false; } else { TRACE("WSASocket() 完成.\n"); } // 将Listen Socket绑定至完成端口中 if( NULL== CreateIoCompletionPort( (HANDLE)m_pListenContext->m_Socket, m_hIOCompletionPort,(DWORD)m_pListenContext, 0)) { this->_ShowMessage("绑定 Listen Socket至完成端口失败!错误代码: %d/n", WSAGetLastError()); RELEASE_SOCKET( m_pListenContext->m_Socket ); return false; } else { TRACE("Listen Socket绑定完成端口 完成.\n"); } // 填充地址信息 ZeroMemory((char *)&ServerAddress, sizeof(ServerAddress)); ServerAddress.sin_family = AF_INET; // 这里可以绑定任何可用的IP地址,或者绑定一个指定的IP地址 //ServerAddress.sin_addr.s_addr = htonl(INADDR_ANY); ServerAddress.sin_addr.s_addr = inet_addr(m_strIP.GetString()); ServerAddress.sin_port = htons(m_nPort); // 绑定地址和端口 if (SOCKET_ERROR == bind(m_pListenContext->m_Socket, (struct sockaddr *) &ServerAddress, sizeof(ServerAddress))) { this->_ShowMessage("bind()函数执行错误.\n"); return false; } else { TRACE("bind() 完成.\n"); } // 开始进行监听 if (SOCKET_ERROR == listen(m_pListenContext->m_Socket,SOMAXCONN)) { this->_ShowMessage("Listen()函数执行出现错误.\n"); return false; } else { TRACE("Listen() 完成.\n"); } // 使用AcceptEx函数,因为这个是属于WinSock2规范之外的微软另外提供的扩展函数 // 所以需要额外获取一下函数的指针, // 获取AcceptEx函数指针 DWORD dwBytes = 0; if(SOCKET_ERROR == WSAIoctl

delphi缺失的winsock2.pas源码

对编译时缺少winsock2的问题可include此源码解决问题

套接字选项和I/O控制命令

<br />   套接字一旦建立,通过套接字选项和I/O控制命令对各种属性进行操作,便可对套接字的行为产生影响。有的选项只用于信息的返回,而有的选项则可在应用程序中影响套接字的行为。I / O控制命令肯定会对套接字的行为产生影响。<br />   下面着重讨论四个Winsock函数:getsockopt、setsocketopt、ioctlsocketWSAIoctl。每个函数都有大量命令。这些I/O控制命令和选项大多定义在Winsock.h或Winsock2.h内,具体取决于它们到底从属于Winsock

jackfirst86的专栏 941

WSAIoctl

WSAIoctl The WSAIoctl function controls the mode of a socket. int WSAIoctl( SOCKET s, DWORD dwIoControlCode, LPVOID lpvInBuffer, DWORD cbInBuffer, LPVOID lpvOutBuffer, DWORD cbOutBuffer, LPDWORD lpcbB

kantala的专栏 2018

0047__WSAIoctl 的SIO_GET_EXTENSION_FUNCTION_POINTER用法

WSAIoctl 的SIO_GET_EXTENSION_FUNCTION_POINTER用法_transmitfile iocp-CSDN博客

行潇 236

(转)WSAIoctl Function

<br /><br />套接字选项和I/O控制命令<br /> <br />   套接字一旦建立,通过套接字选项和I/O控制命令对各种属性进行操作,便可对套接字的行为产生影响。有的选项只用于信息的返回,而有的选项则可在应用程序中影响套接字的行为。I / O控制命令肯定会对套接字的行为产生影响。<br /><br /><br />   下 面着重讨论四个Winsock函数:getsockopt、setsocketopt、ioctlsocketWSAIoctl 。每个函数都有大量命 令。这些I/O控制命令和选

gxj1680的专栏 1948

delphi winsock2

delphi winsock2 没有这个文件就无法使用WSAIoctl

WSAIoctl函数SIO_GET_EXTENSION_FUNCTION_POINTER参数的意义

Winsock2的其他供应商不一定会实现AcceptEx函数。同样情况也包括的其他Microsoft的特定APIs如TransmitFile,GetAcceptExSockAddrs以及其他Microsoft将在以后版本的windows里。在运行WinNT和Win2000的系统上,这些APIs在Microsoft提供的DLL(mswsock.dll)里实现,可以通过链接mswsock.lib或者通过WSAioctl的SIO_GET_EXTENSION_FUNCTION_POINTER操作动态调用这些扩展AP

森林中的波罗 4897

WSAIoctl 的SIO_GET_EXTENSION_FUNCTION_POINTER用法

Winsock2的其他供应商不一定会实现AcceptEx函数。同样情况也包括的其他Microsoft的特定APIs如TransmitFile,GetAcceptExSockAddrs以及其他Microsoft将在以后版本的windows里。在运行WinNT和Win2000的系统上,这些APIs在Microsoft提供的DLL(mswsock.dll)里实现,可以通过链接mswsock.lib或者通

2033

关于Winsock:Winsock编程注意事项:特定于提供者的扩展机制

WSAIoctl功能使服务提供商能够提供特定于提供商的功能扩展。 当然,这种机制假定应用程序知道特定扩展并理解所涉及的语义和语法。 这些信息通常由服务提供商供应商提供。 要调用扩展函数,应用程序必须首先请求指向所需函数的指针。 这是通过使用SIO_GET_EXTENSION_FUNCTION_POINTER命令代码的WSAIoctl函数完成的。 WSAIoctl的输入缓冲区包含所需扩展函数的标识...

一世豁然的专栏 535

使用WSAIoctl获取AcceptEx,Connectex,Getacceptexsockaddrs函数指针

运行WinNT和Win2000的系统上,这些APIs在Microsoft提供的DLL(mswsock.dll)里实现,可以通过链接mswsock.lib或者通过WSAioctl的SIO_GET_EXTENSION_FUNCTION_POINTER操作动态调用这些扩展APIs. 未获取函数指针就调用函数(如直接连接mswsock.lib并直接调用AcceptEx)的消耗是很大的,因...

dingbianping4275的博客 536

IO控制命令

ioctl 控制套接字IO行为,获取套接字未决IO的信息。   向套接字发送ioctl命令的函数有两个 一个是源于winsock1 的 ioctlsocket 另一个是 winsock2 新引进的 WSAIoctl   ioctl的常用命令: FIONBIO:将套接字设置于非阻塞模式 FIONREAD:返回套接字上要读的数据大小 SIOCATMARK:用来确定外带数据是否可读 ...

weixin_33754913的博客 282

使用WSAIoctl获取AcceptEx函数指针 [转]

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34075268的博客 122

使用WSAIoctl获取socket扩展函数(如AcceptEx)的指针

未获取函数指针就调用函数(如直接连接mswsock.lib并直接调用AcceptEx)的消耗是很大的,因为AcceptEx 实际上是存在于Winsock2结构体系之外的。每次应用程序常试在服务提供层上(mswsock之上)调用AcceptEx时,都要先通过WSAIoctl获取该函数指针。如果要避免这个很影响性能的操作,应用程序最好是直接从服务提供层通过WSAIoctl先获取这些APIs的指针。

鼓浪屿对面海景房 3455
上一篇: 套接字IO模型(三) WSAEventSelect模型
下一篇: MsgWaitForMultipleObjects WaitForMultipleObjects
jimaliu
博客等级 码龄20年 8粉丝 6原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值