完成端口io完成端口 和 epllo的区别

完成端口  时间:2021-05-29  阅读:()

完成端口 为什么正常closesocket还是服务器还是会出现异常退出

你好。

和超时没关系,一般SOCKET在调用recv函数时如果有数据时才返回, 如果没有数据时就在recv函数等待直至有数据或SOCKET关闭或网络异常, 如果是SOCKET被关闭时,recv返回0,异常时返回-1, 用GetLastError可以察看具体的错误。

(只在socket为同步方式有效) 如果我的回答没能帮助您,请继续追问。

请教GetQueuedCompletionStatus函数如何通知完成端口管理新线程?

GetQueuedCompletionStatus函数有个OVERLAPPED结构,很多资料上都采用不同的结构体来扩展该结构,比如有的资料定义: typedef struct _OVERLAPPEDPLUS { OVERLAPPED ol; SOCKET s, sclient; int OpCode; WSABUF wbuf; DWORD dwBytes, dwFlags; }OVERLAPPEDPLUS; 然后,当GetQueuedCompletionStatus(hIocp, &dwBytesXfered,(PULONG_PTR)&PerHandleKey, &Overlap, INFINITE);函数返回时候,人们常用OverlapPlus = CONTAINING_RECORD(Overlap, OVERLAPPEDPLUS, ol)得到一些信息。

比如此时端口上完成的是什么操作,数据是什么等,还有,系统如何做到自动填充上述的结构的,也就是说,系统怎么知道在Overlap->OpCode存放的应该是操作类型,如读,写操作,而在Overlap->wbuf存放的应该是读写数据。

Overlap->OpCode,操作类型是在投递WSASend,WSARecv的时候,由你自己指定填充这个字段。

因为是非堵塞的,等于投递到与套接字相关联的完成端口上,系统会把把WSASend对应的缓冲区提交到底层缓冲,也可以把WSARecv投递的缓冲区,用接收到的数据填充,每一个WSASend,WSARecv,都应有新申请一个overlaspped plus结构提交,以存放本次投递的IO操作的相关数据,——单IO操作数据所以工作器线程中,从完成端口队列中get得到一个完成包的时候,可以根据单句柄数据知道在这个完成端口上是哪一个套接字投递的IO操作完成了,从get到的overlapped中得到相关的已经完成IO数据和信息,并作相应的处理。

比如投递了1M,完成包却告知只完成512K,那么你就知道要把余下的512K继续投递WSASend,当然上一个WSASend的Overlapped这个时候可以重用到下一个WSASend中,这个是允许的,可以用一个字段存放全部1M,把余下未Send成功512k放到wbuf中,继续投递或者投递WSARecv1M数据,却收到一个512K的完成通知,那么你要继续投递WSARecv,当然前一个WSARecv的overlapped也可以重用,不过需要一些处理,把已经接收到的512K保存到某个字段中,再投递一个512K的请求去接收完成端口内部,对投递的Overlapped的填充,好像只有WSARecv的时候填充WSABUF,其他都是投递IO前,代码中显式填充,并投递的。

至于完成了多少个字节,是在lpNumberOfBytes中得到。

对GetQueuedCompletionStatus函数解释: 实现从指定的IOCP获取CP。

当CP队列为空时,对此函数的调用将被阻塞,而不是一直等待I/O的完成。

当CP队列不为空时,被阻塞的线程将以后进先出(LIFO)顺序被释放。

对于IOCP机制,它允许多线程并发调用GetQueuedCompletionStatus函数,最大并发数是在调用CreateIoCompletionPort函数时指定的,超出最大并发数的调用线程,将被阻塞。

函数解释如下: 声明: BOOL GetQueuedCompletionStatus( HANDLE CompletionPort, LPDWORD lpNumberOfBytes, PULONG_PTR lpCompletionKey, LPOVERLAPPED *lpOverlapped, DWORD dwMilliseconds); 调用参数: CompletionPort:指定的IOCP,该值由CreateIoCompletionPort函数创建。

lpnumberofbytes:一次完成后的I/O操作所传送数据的字节数。

pletionkey:当文件I/O操作完成后,用于存放与之关联的CK。

lpoverlapped:为调用IOCP机制所引用的OVERLAPPED结构。

dwmilliseconds:用于指定调用者等待CP的时间。

返回值: 调用成功,则返回非零数值,相关数据存于lpNumberOfBytes、lpCompletionKey、lpCompletionKey变量中。

失败则返回零值。

完成端口内存池设计时的想法,请大家看看我想的对不对

实际效果这真的是这样吗?不太见得。

换一个角度看,计算机管理的内存就是我们的内存池。

不是吗? 能作为服务器的机子,一般都是专门的跑一个服务程序。

操作系统管理的内存本身就是我们的内存池了。

其次,在应用程序唯一的情况下,内存的碎片跟你的程序中的new/delete模块尺寸才是最主要的。

比如游戏服务器中,最主要的对象产生就是物品和人物。

那么在设计上往往可以规定好尺寸的种类,或者静态分配一个数组,来模拟一些链表的实现。

所以,在一些必须的new/delete模块上,把系统的内存管理看成内存池即可;更重要的是在你的应用程序中掌握好对象的尺寸。

windows系统中怎么关闭和开启端口

第一步,点击“开始”菜单/设置/控制面板/管理工具,双击打开“本地安全策略”,选中“IP 安全策略,在本地计算机”,在右边窗格的空白位置右击鼠标,弹出快捷菜单,选择“创建 IP 安全策略”(如右图),于是弹出一个向导。

在向导中点击“下一步”按钮,为新的安全策略命名;再按“下一步”,则显示“安全通信请求”画面,在画面上把“激活默认相应规则”左边的钩去掉,点击“完成”按钮就创建了一个新的IP 安全策略。

第二步,右击该IP安全策略,在“属性”对话框中,把“使用添加向导”左边的钩去掉,然后单击“添加”按钮添加新的规则,随后弹出“新规则属性”对话框,在画面上点击“添加”按钮,弹出IP筛选器列表窗口;在列表中,首先把“使用添加向导”左边的钩去掉,然后再点击右边的“添加”按钮添加新的筛选器。

第三步,进入“筛选器属性”对话框,首先看到的是寻址,源地址选“任何 IP 地址”,目标地址选“我的 IP 地址”;点击“协议”选项卡,在“选择协议类型”的下拉列表中选择“TCP”,然后在“到此端口”下的文本框中输入“135”,点击“确定”按钮(如左图),这样就添加了一个屏蔽 TCP 135(RPC)端口的筛选器,它可以防止外界通过135端口连上你的电脑。

点击“确定”后回到筛选器列表的对话框,可以看到已经添加了一条策略,重复以上步骤继续添加 TCP 137、139、445、593 端口和 UDP 135、139、445 端口,为它们建立相应的筛选器。

重复以上步骤添加TCP 1025、2745、3127、6129、3389 端口的屏蔽策略,建立好上述端口的筛选器,最后点击“确定”按钮。

第四步,在“新规则属性”对话框中,选择“新 IP 筛选器列表”,然后点击其左边的圆圈上加一个点,表示已经激活,最后点击“筛选器操作”选项卡。

在“筛选器操作”选项卡中,把“使用添加向导”左边的钩去掉,点击“添加”按钮,添加“阻止”操作(右图):在“新筛选器操作属性”的“安全措施”选项卡中,选择“阻止”,然后点击“确定”按钮。

第五步、进入“新规则属性”对话框,点击“新筛选器操作”,其左边的圆圈会加了一个点,表示已经激活,点击“关闭”按钮,关闭对话框;最后回到“新IP安全策略属性”对话框,在“新的IP筛选器列表”左边打钩,按“确定”按钮关闭对话框。

在“本地安全策略”窗口,用鼠标右击新添加的 IP 安全策略,然后选择“指派”。

于是重新启动后,电脑中上述网络端口就被关闭了,病毒和黑客再也不能连上这些端口,从而保护了你的电脑。

打印机安装怎么选择打印端口?

一般电脑会自动识别打印端口,只需要安装打印机的驱动即可。

如果无法自动识别的话,可以打开控制面板,选择查看设备和打印机,右键单击打印机,选择“属性”,在属性对话框点击“端口”,在这里即可自由选择端口,单击确定完成选择。

1、首先,点击电脑左下角开始菜单。

2、然后选择设备和打印机,如图所示。

3、接着选择你要修改的打印机,右击选择打印机属性。

5、在打印机属性下选择端口,如图所示。

6、最后在端口内选择COM1,点击应用后再点击确定即可。

io完成端口 和 epllo的区别

展开全部 完成端口 完成端口基本上公认为一种在windows服务平台上比较成熟和高效的IO方法,利用完成端口进行重叠I/O的技术在WindowsNT和WIndows2000上提供了真正的可扩展性。

完成端口和Windows Socket2.0结合可以开发出支持大量连接的网络服务程序。

ZJI-全场八折优惠,香港服务器 600元起,还有日本/美国/韩国服务器

月付/年付优惠码:zji  下物理服务器/VDS/虚拟主机空间订单八折终身优惠(长期有效)一、ZJI官网点击直达ZJI官方网站二、特惠香港日本服务器香港大埔:http://hkdb.speedtest.zji.net/香港葵湾:http://hkkw.speedtest.zji.net/日本大阪:http://jpsk.speedtest.zji.net/日本大阪一型 ...

Megalayer(48元)新增 美国CN2优化线路特价服务器和VPS方案

Megalayer 商家算是新晋的服务商,商家才开始的时候主要是以香港、美国独立服务器。后来有新增菲律宾机房,包括有VPS云服务器、独立服务器、站群服务器等产品。线路上有CN2优化带宽、全向带宽和国际带宽,这里有看到商家的特价方案有增加至9个,之前是四个的。在这篇文章中,我来整理看看。第一、香港服务器系列这里香港服务器会根据带宽的不同区别。我这里将香港机房的都整理到一个系列里。核心内存硬盘IP带宽...

Virmach($5.23/年)年付VPS闪购

每每进入第四季度,我们就可以看到各大云服务商的促销力度是一年中最大的。一来是年底的促销节日活动比较多,二来是商家希望最后一个季度冲刺业绩。这不还没有到第四季度,我们看到有些商家已经蠢蠢欲动的开始筹备活动。比如素有低价VPS收割机之称的Virmach商家居然还没有到黑色星期五就有发布黑五促销活动。Virmach 商家有十多个数据中心,价格是便宜的,但是机器稳定性和速度肯定我们也是有数的,要不这么低的...

完成端口为你推荐
华为云终端华为手机云服务打不开站群是什么意思什么叫网站站群linux开放8080端口怎么在linux 打开80端口共享虚拟主机基础版虚拟机和主机共享hnd-132192168.1.132无线密码是多少腾讯云产品kyani产品怎么样国外手机号国外的手机号是什么样的??vps什么是VPS? 和虚拟主机有什么不同?ck香港官网香港ck Calvin Klein正装什么价位?一般什么时候会打折?vc9运行库下载DX.netVC运行库安装
企业主机 softlayer 怎样建立邮箱 asp免费空间申请 彩虹云 闪讯官网 创建邮箱 海外空间 中国域名 阿里云邮箱登陆地址 江苏徐州移动 谷歌搜索打不开 cloudflare cdn免备案空间 饭桶 let vpsaa dns是什么意思 ddos攻击 qq空间登录首页 更多