b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

acceptex_用户态和内核态的区别_iocp(2)

电脑杂谈  发布时间:2016-11-23 08:03:54  来源:网络整理

1. 1个新的连接被接受。

2. 返回连接的本地和远程地址。

3. 得到远程发送的第1个数据块。

*较accept函数而言,程序使用AcceptEx可以更快连接到1个套接字。

*输出缓冲区lpOutputBuffer存放内容包括:接收到的第一块数据、本地套接字地址(服务器)和远程套接字地址(客户端)。

使用单一的缓冲区可以提高性能,当使用AcceptEx时,必须使用GetAcceptExSockaddrs函数将输出缓冲区的内容解析到3个不同部分的缓冲区 (data, local socket address, and remote socket address)。 在windows XP 及随后版本中,当AcceptEx函数完成操作并且SO_UPDATE_ACCEPT_CONTEXT选项在被接受的socket中被设置时, socket相关的本地地址(local address )可以使用getsockname函数获得。类似的,与被接受socket 相关的远程端地址(the remote address)可以使用getpeername函数获得。

*本地和远程地址缓冲区的大小必须比使用传输协议的sockaddr地址大十六个字节,是因为是以内部格式写入。例如,1个SOCKADDR_IN大小(TCP / IP协议的地址结构)是十六个字节。因此,本地和远程地址缓冲区的大小必须指定至少3两个字节。

*AcceptEx函数使用的重叠I / O。与使用accept相比,使用AcceptEx能以相对较少的线程数量处理大量的客户。如同所有的Win32重叠函数,Win32事件或完成端口都可用来作为完成通知机制。

AcceptEx和accept函数的另1个主要区别是,AcceptEx函数需要调用者提供2个套接字参数:

1个指定套接字。

1个指定接受连接的套接字。

该sAcceptSocket参数必须是1个已经打开的socket,不能是已绑定或者是已连接的socket。

*GetQueuedCompletionStatus函数或GetOverlappedResult函数的lpNumberOfBytesTransferred参数表明该请求接收到的字节数。

当此操作成功完成,sAcceptSocket可以使用,但只限下列功能:

ReadFile

WriteFile

发送

recv

TransmitFile

关闭套接字

注意:如果调用TransmitFile函数时,指定TF_DISCONNECT和TF_REUSE_SOCKET标志,指定套接字的已返回未绑定,未连接的状态。然后,您可以使用该套接字句柄作为AcceptEx函数的sAcceptSocket参数。但该套接字不能作为ConnectEx函数的参数。

当AcceptEx函数返回时,sAcceptSocket是1个已连接套接字。如未指定SO_UPDATE_ACCEPT_CONTEXT属性,sAcceptSocket不继承与sListenSocket参数相关套接字的属性。使用setsockopt函数来设置SO_UPDATE_ACCEPT_CONTEXT选项,指定sAcceptSocket的套接字句柄和sListenSocket作为选项的值(specifyingsAcceptSocketas the socket handle andsListenSocketas the option value) 。

例如:

error= setsockopt(sAcceptSocket,

SOL_SOCKET,

SO_UPDATE_ACCEPT_CONTEXT,

(char*)&sListenSocket,


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-21596-2.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...