请教各位师傅,关于iocp的wsasend和wsarecv
我好像没分,抱歉啊,各位。
#define opcode_recv 1
#define opcode_send 2
struct Client
{
//其他省略
int nOpcode;
};
在客户连接上之后,我要对这个客户投递wsarecv操作,
接收到这个客户的数据后,我还要投递wsarecv操作,
这个很好理解,不停等待数据到来嘛。
但是,在我投递完wsarecv操作后,数据没有到来,
这时候,我要发送数据,此时的Client.nOpcode = opcode_recv;
我投递完wsasend操作后,Client.nOpcode = opcode_send;
此时客户端数据来了,
该怎么理解啊,
是不是wsarecv的数据,会把buf给覆盖,但在worker线程中,Client.nOpcode 又等于 opcode_send,
把收到的数据又发给客户了,
还是此时收到的数据被放在了系统的缓冲中,在投递完wsasend后,GetQueuedCompletionStatus中不会响应wsarecv,
要等到wsasend结束后,人为的再次投递wsarecv后,GetQueuedCompletionStatus才会对刚刚收到的数据进行响应?
谢谢各位,此问题让我很是费解。