网络编程——IOCP函数
2016-04-21 16:03
302 查看
CreateIoCompletionPort(
_In_ HANDLE FileHandle,
_In_opt_ HANDLE ExistingCompletionPort,
_In_ ULONG_PTR CompletionKey,
_In_ DWORD NumberOfConcurrentThreads
);
这个函数都说是端口绑定,我觉得不太准确,在网络编程的时候,会先使用这个函数创建一个完成端口,然后再次调用他,将创建的完成端口作为第二个参数传入,实现端口绑定。
在网络编程IOCP模型中,我们会为每一个客户new一个对象,但是客户socket并非就是与你new的这个对象绑定的,他通过socket发消息,你就接受了socket,如果是一个还好,如果很多,你有如何分辨。
而这个函数就是这个作用,告诉完成端口,那个socket对应哪个对象,第一个参数就是socket,第三个参数,就是你要绑定的对象,如果是局部的,没有用,必须是全局的。
WSARecv(
_In_ SOCKET s,
_In_reads_(dwBufferCount) __out_data_source(NETWORK) LPWSABUF lpBuffers,
_In_ DWORD dwBufferCount,
_Out_opt_ LPDWORD lpNumberOfBytesRecvd,
_Inout_ LPDWORD lpFlags,
_Inout_opt_ LPWSAOVERLAPPED lpOverlapped,
_In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
);
BOOL
WINAPI
GetQueuedCompletionStatus(
_In_ HANDLE CompletionPort,
_Out_ LPDWORD lpNumberOfBytesTransferred,
_Out_ PULONG_PTR lpCompletionKey,
_Out_ LPOVERLAPPED * lpOverlapped,
_In_ DWORD dwMilliseconds
);
这两个函数一起介绍,
WSARecv这个函数,请求完成端口帮我接收recv事件触发时发过来的数据。不要被他迷惑了,前几个我就不说了,就说倒数第二个。
在网络编程IOCP模型中,WSARecv这个函数的倒数第二个函数传入的是个缓冲区,真正的意义是,数据真正接受的地方,GetQueuedCompletionStatus这个函数从IOCP队列中接受数据,就是从WSARecv倒数第二个参数中寻找数据,然后将数据给GetQueuedCompletionStatus倒数第二个参数。
关于别的,网上好像都能找到,就不写了
_In_ HANDLE FileHandle,
_In_opt_ HANDLE ExistingCompletionPort,
_In_ ULONG_PTR CompletionKey,
_In_ DWORD NumberOfConcurrentThreads
);
这个函数都说是端口绑定,我觉得不太准确,在网络编程的时候,会先使用这个函数创建一个完成端口,然后再次调用他,将创建的完成端口作为第二个参数传入,实现端口绑定。
在网络编程IOCP模型中,我们会为每一个客户new一个对象,但是客户socket并非就是与你new的这个对象绑定的,他通过socket发消息,你就接受了socket,如果是一个还好,如果很多,你有如何分辨。
而这个函数就是这个作用,告诉完成端口,那个socket对应哪个对象,第一个参数就是socket,第三个参数,就是你要绑定的对象,如果是局部的,没有用,必须是全局的。
WSARecv(
_In_ SOCKET s,
_In_reads_(dwBufferCount) __out_data_source(NETWORK) LPWSABUF lpBuffers,
_In_ DWORD dwBufferCount,
_Out_opt_ LPDWORD lpNumberOfBytesRecvd,
_Inout_ LPDWORD lpFlags,
_Inout_opt_ LPWSAOVERLAPPED lpOverlapped,
_In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
);
BOOL
WINAPI
GetQueuedCompletionStatus(
_In_ HANDLE CompletionPort,
_Out_ LPDWORD lpNumberOfBytesTransferred,
_Out_ PULONG_PTR lpCompletionKey,
_Out_ LPOVERLAPPED * lpOverlapped,
_In_ DWORD dwMilliseconds
);
这两个函数一起介绍,
WSARecv这个函数,请求完成端口帮我接收recv事件触发时发过来的数据。不要被他迷惑了,前几个我就不说了,就说倒数第二个。
在网络编程IOCP模型中,WSARecv这个函数的倒数第二个函数传入的是个缓冲区,真正的意义是,数据真正接受的地方,GetQueuedCompletionStatus这个函数从IOCP队列中接受数据,就是从WSARecv倒数第二个参数中寻找数据,然后将数据给GetQueuedCompletionStatus倒数第二个参数。
关于别的,网上好像都能找到,就不写了
相关文章推荐
- 开源框架OKHttp的使用01-基础
- 计算机网络--数据链据层之MAC子层(整理)
- 计算机网络--数据链据层上的设备详解
- 网络编程中套接字创建过程
- 计算机网络--网络层之IP地址与子网
- 计算机网络--传输层知识总结
- 三大WEB服务器apache,nginx,lighttpd
- ESB企业服务总线
- ASIHTTPRequest 和 AFNetWorking 异步请求
- 使用R的networkD3包画可交互的网络图
- 【bzoj1070】[SCOI2007]修车 网络流
- okhttp,Android网络框架学习之OKHttp
- iOS HTTP请求与解析
- okhttp总结
- HttpWatch Pro安装失败解决方案:安装稳定版7.0
- TCP协议,UDP 协议的区别
- Mina TCP传输下主要接口介绍
- 网络:AFNetworking框架的使用
- 分类:神经网络
- TCP半连接与SYN攻击