网络编程——IOCP函数

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倒数第二个参数。

         关于别的,网上好像都能找到,就不写了






  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值