IOCP模式中,在socket上同时投递WSARecv和WSASend的问题?
亚细亚 2019-07-16 04:56:47 typedef struct _SocketState // socket state & control
{
char operation;
SOCKET socket;
DWORD length;
char buf[MAX_BUF];
} SocketState;
static SocketState* new_socket_state(void)
{
return (SocketState *)calloc (1, sizeof(SocketState));
}
static WSAOVERLAPPED* new_overlapped(void)
{
return (WSAOVERLAPPED *)calloc (1, sizeof(WSAOVERLAPPED));
}
newSocketState = new_socket_state();
newSocketState->socket = socketState->socket;//此处的socketState->socket是已经建立连接的socket;
CreateIoCompletionPort((HANDLE)newSocketState->socket, cpl_port,(ULONG_PTR)newSocketState, 0) //绑定到完成端口上;
==================
我要投递两个io:
socketState->operation = OP_READ;
WSARecv(newSocketState ->socket, &wsabuf, 1, NULL, &flags, ovl, NULL)
socketState->operation = OP_WRITE;
WSASend(newSocketState ->socket, &wsabuf, 1, NULL, 0, ovl, NULL)
这里我不可能让socketState->operation同时为OP_READ或者OP_WRITE两个值吧?这里应该如何处理?