DELPHI中完成端口(IOCP)的简单分析(1)
LPPER_IO_OPERATION_DATA = ^ PER_IO_OPERATION_DATA ;
PER_IO_OPERATION_DATA = packed record
Overlapped: OVERLAPPED;
DataBuf: TWSABUF;
Buffer: array [0..1024] of CHAR;
BytesSEND: DWORD;
BytesRECV: DWORD;
end;
PER_HANDLE_DATA = packed record
Socket: TSocket;
end;
begin
WSACleanup();
end;
GetSystemInfo(LocalSI);
for I:=0 to LocalSI.dwNumberOfProcessors * 2 -1 do
begin
hThread := CreateThread(nil, 0, @ServerWorkerThread, Pointer(CompletionPort),0, ThreadID);
if (hThread = 0) then
begin
Exit;
end;
CloseHandle(hThread);
end;
Listensc:=WSASocket(AF_INET,SOCK_STREAM,0,Nil,0,WSA_FLAG_OVERLAPPED);
if Listensc=SOCKET_ERROR then
begin
closesocket(Listensc);
WSACleanup();
end;
sto.sin_family:=AF_INET;
sto.sin_port:=htons(5500);
sto.sin_addr.s_addr:=htonl(INADDR_ANY);
if bind(Listensc,sto,sizeof(sto))=SOCKET_ERROR then
begin
closesocket(Listensc);
end;
listen(Listensc,20);
begin
Acceptsc:= WSAAccept(Listensc, nil, nil, nil, 0);
begin
closesocket(Listensc);
exit;
end;
PerHandleData := LPPER_HANDLE_DATA (GlobalAlloc(GPTR, sizeof(PER_HANDLE_DATA)));
if (PerHandleData = nil) then
begin
exit;
end;
PerHandleData.Socket := Acceptsc;
if (CreateIoCompletionPort(Acceptsc, CompletionPort, DWORD(PerHandleData), 0) = 0) then
begin
exit;
end;
if (PerIoData = nil) then
begin
exit;
end;
ZeroMemory(@PerIoData.Overlapped, sizeof(OVERLAPPED));
PerIoData.BytesSEND := 0;
PerIoData.BytesRECV := 0;
PerIoData.DataBuf.len := 1024;
PerIoData.DataBuf.buf := @PerIoData.Buffer;
Flags := 0;
if (WSARecv(Acceptsc, @(PerIoData.DataBuf), 1, @RecvBytes, @Flags,@(PerIoData.Overlapped), nil) = SOCKET_ERROR) then
begin
if (WSAGetLastError() <> ERROR_IO_PENDING) then
begin
//最近在检查代码的时候发现以前这里只是使用Exit来退出是不正确的。这里需要删除申请的单IO数据结构,否子会出现内存泄露。 (2008年3月24日)
closesocket(AcceptSc);
if PerIoData <> nil then
begin
GlobalFree(DWORD(PerIoData));
end;
Continue;
end;
转载于:https://www.cnblogs.com/fxh7622/archive/2010/04/11/1709848.html
DELPHI中完成端口(IOCP)的简单分析(1)相关推荐
- 直立车模控制中三种滤波算法简单分析(清华卓晴)
摘自:https://mp.weixin.qq.com/s/WbCh0NFAnsf9y2blQenf7g 让我想起余义的一篇文章也是说到平衡车有三种滤波,我想和卓晴说的是一样的吧. https://b ...
- python中“羊车门问题”的简单分析与代码实现
1."羊车门问题"题目及要求. 2.问题的数学逻辑分析. 3.python代码分析出换和不换的概率. "羊车门问题"题目及要求: 有三扇关着的门,一扇门后面停着 ...
- linux中524端口,liunx下攻击分析及如何通过交换机封端口
4上汇聚层交换机封IP段 进入华为交换机: [Huawei]int xg0/0/4 //进入对应的接口 [Huawei-GigabitEthernet0/0/4]un traffic-filter i ...
- oracle中会话和连接数的简单分析
通俗来讲,会话(Session) 是通信双方从开始通信到通信结束期间的一个上下文(Context).这个上下文是一段位于服务器端的内存:记录了本次连接的客户端机器.通过哪个应用程序.哪个用户登录等信息 ...
- Java中final关键字作用的简单分析
final关键字可以用来修饰引用.方法和类. 一.用来修饰一个引用 如果引用为基本数据类型,则该引用为常量,该值无法修改: 如果引用为引用数据类型,如对象.数组,则该对象.数组本身可以修改,但指向该对 ...
- php strlen ctf,CTF中的PHP反序列化漏洞简单分析
[PHP] 纯文本查看 复制代码<?php class start_gg { public $mod1; public $mod2; public function __construct() ...
- delphi中pos函数怎么用?
pos(a,b)函数用法如下:取出子串a,在父串b中第一次出现的位置. 例如: pos('b','abcd'): 返回结果是2: 在delphi中使用汇编异常的简单,只用使用关键字asm ....en ...
- 蛙蛙推荐:在c#使用IOCP(完成端口)的简单示例
蛙蛙推荐:在c#使用IOCP(完成端口)的简单示例 上次给大家发了利用winsock原生的api来做一个同步的socket服务器的例子,大致上只是贴了一些代码,相信大家这么冰雪聪明,已经研究的差不多了 ...
- 802.1Q中的secure/check/fallback/disable的简单分析
802.1Q中的secure/check/fallback/disable的简单分析 芯片手册原文 Security & Port Mapping The 802.1Q Security fe ...
- 在c#使用IOCP(完成端口)的简单示例
上次给大家发了利用winsock原生的api来做一个同步的socket服务器的例子,大致上只是贴了一些代码,相信大家这么冰雪聪明,已经研究的差不多了.因为winsock的api使用在msdn或者goo ...
最新文章
- 最短路算法总结(入门版)
- Linux Kernel TCP/IP Stack — 协议栈收包处理流程
- PHP学习资源收集~
- spring问题--Unable to validate using XSD
- ob_start()失效与phpunit的非正常结束
- Android之jni调用java函数总结
- 如何用C++来计算大数字乘法
- My97DatePicker日期控件的使用
- 同源策略——浏览器安全卫士
- 基于JAVA+SpringMVC+Mybatis+MYSQL的高校勤工助学管理系统
- docker mysql node_Docker打包nodejs项目和数据库
- 谷粒商城:14.全文检索ElasticSearch
- double im2double mat2gray之一二说
- 【语音处理】基于matlab语音去噪频谱分析【含Matlab源码 1019期】
- 面试题单例模式的五种写法(枚举妙用)
- GRLDR外部MENU.LST调用GRLDR内部菜单
- 无人机油动发动机调试
- 接入翼支付的php,翼支付商户接入规范.doc
- matlab里添加白噪声,转Matlab中添加高斯白噪声
- 阿卡迪亚大学计算机专业好考吗,申请阿卡迪亚大学究竟难不难?
热门文章
- Linux学习记录--命令与文件的查询
- Android第一个程序Say Hello To Android
- mysql的瓶颈_MySQL 瓶颈分析及优化
- 华为鸿蒙 os 适配机型曝光,华为鸿蒙OS 2.0首批适配机型曝光
- docker portainer_Docker可视化管理:Portainer中文版
- azure java_使用 Java 的 Azure 存储示例 | Microsoft Docs
- 生成springboot banner网站
- 中职计算机多媒体教材,中职汽车维修课中计算机多媒体教学的实施
- 7. 锁定框架(The Locking Framework)
- Spring源码之bean的加载(五)准备创建bean