请教各位:IOCP中的GetQueuedCompletionStatus()函数是否只能接受wsasend,wsarecv投递的消息呢?
在我的测试环境中GET函数不能接受普通的send, recv投递的消息。分不够另开贴。
(我正在开发一个数据库服务器,该服务器设计用IOCP实现监听。C/S两端可能是异构系统)

解决方案 »

  1.   

    IOCP中的GetQueuedCompletionStatus()函数是否只能接受wsasend,wsarecv投递的消息呢?
    ============================
    只能接受带Overlapped结构的调用。其中包括WSASend,WSASendTo,WSARecv,WSARecvFrom,AcceptEx,ConnectEx等等。
      

  2.   

    ls的大哥,
    我要开发的是一个类似中间件服务器的东西,两端是异构系统
    client端可能是C#,java,php或者其他的脚本语言,
    这种情况下,我还想使用IOCP的话有什么解决方案?
    (Client端可能是LINUX + java)
      

  3.   

    我记得好像听人说过微软的IIS是用IOCP开发的。
    如果是这样,那么Linux平台下的Firefox如何访问?
    还有就是,一般的商用中间件服务器难道都是阻塞式的I/O?
      

  4.   

    我要开发的是一个类似中间件服务器的东西,两端是异构系统 
    client端可能是C#,java,php或者其他的脚本语言, 
    这种情况下,我还想使用IOCP的话有什么解决方案? 
    (Client端可能是LINUX   +   java)
    =========================
    你的实现只在于你自己的选择,跟别人(对端)如何实现没有任何关系。只要网络协议一致即可。
      

  5.   

    - - 服务器端用iocp  客户机不用什么构架直接连的.... 
      

  6.   

    to unsigned:
    网络协议是一致的,实现的都是自定义的网络协议
    但是关键问题是:客户端Java没有办法投递WSASend的消息to sangermax:
    服务器端是用IOCP,客户端可以直接连接没有问题
    但是如何投递异步消息?
    在我的测试环境下,connect到服务器没问题,但是Java没法投递wsasend, wsarecv消息
    所以服务器的线程池里GET函数无法返回。不知道我描述清楚了没有
      

  7.   

    客户端Java没有办法投递WSASend的消息 
    =================================
    说了,与对端的实现方式无关,WSASend也是Send,你所需要关心的只是他们Send过来的数据,而不是去管他们具体使用send科学还是sendto,又或者使用write等等。
      

  8.   

    我现在能想到的解决方案是:
    客户端用win32写一个可以发送异步消息的dll给Java本地调用。
    但是如果是Linux下的Java就没办法了。
      

  9.   

    僵哥大哥:
    我的线程池里的GET函数对于客户端的普通send没法返回,
    这个问题怎么解决?
      

  10.   

    我的实验环境下:用IOCP绑定所有客户端请求socket,在线程池里GET函数返回处理报文,但是客户端的wsasend可以投递,普通send不能使GET返回
      

  11.   

    服务端用iocp 客户端用任意一种socket模式都行 比如send 同步异步都可以
      

  12.   

    我的线程池里的GET函数对于客户端的普通send没法返回, 
    这个问题怎么解决? 
    =======================
    先要弄清楚的是,你使用I/O完成端口,仅限于你的实现。也就是说你在接收客户端的信息时,需要调用的是WSARecv,提交了一个接收请求之后,客户端才能发送数据,否则并不会因为客户端到来的send/WSASend通讯你有数据接收。这是前置处理的。由于需要重叠操作,所以你必须指定使用重叠操作函数能可能得到重叠I/O完成的通知。换句话说,如果你调用的是recv,这是一个立即函数,仅只能阻塞或者立即接收。至于客户端使用send你无法收到消息,这个仅判断为个人的想当然。首先你需要使用的是支持重叠操作的Winsock2,并且所使用的Socket是由WSASocket带Overlapped申明的。然后,需要将进行完成操作的SOCKET与完成端口进行绑定。