通过Reflector和.net的反射机制来探索和使用.net framework未文档化的API
2006-09-06 09:45
561 查看
.net framework对Windows API进行了一层封装,但是有的时候我们会感觉封装的太厚了,失去了一些功能和灵活性。
比如在NCindy里面,我希望能充分利用IOCP,包括Accept一个新的连接。
《Network Programming for Windows/2e》第6章的“Scalable Server Architecture”对一个高伸缩性服务器是应该如何Accepting Connections有一段这样的话。
On Windows 2000 and later versions, Winsock provides a mechanism for determining if an application is running behind in posting adequate AcceptEx calls. When creating the listening socket, associate it with an event by using the WSAEventSelect API call and registering for FD_ACCEPT notification. If there are no pending AcceptEx operations but there are incoming client connections (accepted by the system according to the backlog value), then the event will be signaled. This can even be used as an indication to post additional AcceptEx operations.
可以我找遍Socket类的里里外外都找不到WSAEventSelect API ,但是我对程序的直觉告诉我,这么重要的一个API,.net内部应该会用到。但是,如何证明我的直觉呢?非常感谢Reflector for .NET,它给了我们分析.net framework内部实现的可能。如果没有它,我是在无法工作下去了。
打开Reflector,从.net framework的System Assembly中搜索WSAEventSelect。果然,这个API被实现在一个隐蔽的角落“System.Net.UnsafeNclNativeMethods+OSSOCK”
接着,我们要分析这个API是被如何使用的,在Reflector左边的树图中右键点击WSAEventSelectf方法,选择Analyzer,在右边展开Userd By节点,这里列出了所有使用WSAEventSelect方法的方法、属性。看看.net 内部的实现,该如何使用WSAEventSelect遍了然于胸了。
最后,使用反射调用这个隐蔽的方法。具体如何用,大家还是去参考NCindy的代码吧,或者最直接的,看看NCindy/Example/EchoServer2的实现就可以了。
iceboundrock 2006-09-06 09:45 发表评论
比如在NCindy里面,我希望能充分利用IOCP,包括Accept一个新的连接。
《Network Programming for Windows/2e》第6章的“Scalable Server Architecture”对一个高伸缩性服务器是应该如何Accepting Connections有一段这样的话。
On Windows 2000 and later versions, Winsock provides a mechanism for determining if an application is running behind in posting adequate AcceptEx calls. When creating the listening socket, associate it with an event by using the WSAEventSelect API call and registering for FD_ACCEPT notification. If there are no pending AcceptEx operations but there are incoming client connections (accepted by the system according to the backlog value), then the event will be signaled. This can even be used as an indication to post additional AcceptEx operations.
可以我找遍Socket类的里里外外都找不到WSAEventSelect API ,但是我对程序的直觉告诉我,这么重要的一个API,.net内部应该会用到。但是,如何证明我的直觉呢?非常感谢Reflector for .NET,它给了我们分析.net framework内部实现的可能。如果没有它,我是在无法工作下去了。
打开Reflector,从.net framework的System Assembly中搜索WSAEventSelect。果然,这个API被实现在一个隐蔽的角落“System.Net.UnsafeNclNativeMethods+OSSOCK”
接着,我们要分析这个API是被如何使用的,在Reflector左边的树图中右键点击WSAEventSelectf方法,选择Analyzer,在右边展开Userd By节点,这里列出了所有使用WSAEventSelect方法的方法、属性。看看.net 内部的实现,该如何使用WSAEventSelect遍了然于胸了。
最后,使用反射调用这个隐蔽的方法。具体如何用,大家还是去参考NCindy的代码吧,或者最直接的,看看NCindy/Example/EchoServer2的实现就可以了。
iceboundrock 2006-09-06 09:45 发表评论
相关文章推荐
- 通过AIDL及反射机制,使用隐藏API挂断电话
- 通过AIDL及反射机制,使用隐藏API挂断电话
- 通过AIDL及反射机制,使用隐藏API挂断电话
- 通过AIDL及反射机制,使用隐藏API挂断电话
- 如何通过C#.NET中的反射机制来创建C#.NET泛型类的实例,并调用其方法??
- .NET中反射机制的使用与分析
- [转]在 .net 框架程序中通过DllImport使用 Win32 API
- .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)
- 安卓通过反射机制获取隐藏的API
- ASP.NET 计划任务(不使用外接程序,.net内部机制实现)
- Tensorflow使用技巧:通过graph.as_graph_def探索函数内部机制
- 在 .NET 框架程序中通过DllImport使用 Win32 API
- .NET中反射机制的使用与分析
- .NET中反射机制的使用与分析
- .NET中反射机制的使用与分析
- .NET中反射机制的使用与分析
- .net中的反射机制的使用
- 黑马笔记-.NET中反射机制的使用与分析
- 反射机制及开源框架xUitls的使用,使用HttpUtils通过断点续传下载文件
- .NET基础篇——利用泛型与反射更新实体(ADO.NET Entity Framework)