IOCP模式中,在socket上同时投递WSARecv和WSASend的问题?
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两个值吧?这里应该如何处理?
{
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两个值吧?这里应该如何处理?
...全文
相关推荐
VC++ socket iocp 程序
在VC++环境下,我们可以利用IOCP来构建高性能的服务器应用程序。下面我们将深入探讨如何使用VC++实现基于IOCP的Socket服务器和客户端。
Windows高性能TCP服务器:基于IOCP与MFC的核心原理与工程实践
在Windows平台进行C++高性能网络服务器开发时,I/O模型的选择直接决定了程序的并发处理能力与资源效率。传统的同步阻塞或select模型在面对海量连接时,常受限于线程开销或轮询效率。IOCP(I/O完成端口)作为Windows提供的原生异步I/O解决方案,其核心原理是“完成通知”机制。应用程序发起异步操作后,由内核在操作真正完成时,将通知放入完成端口队列,工作线程仅在有实际任务时被唤醒处理,实现了极高的可扩展性与资源利用率。这一技术价值在于能够构建出支撑数千甚至上万并发连接的服务器,广泛应用于游戏网关
使用阻塞模式、完成端口的多线程socket iocp
关联Socket:将Socket与IOCP关联起来,这样Socket上的I/O操作完成后,系统会将结果发送到IOCP。3. 开始I/O操作:使用WSARecv或WSASend发起非阻塞的I/O操作。
IOCP详细理解
IOCP不仅用于SOCKET操作,也可以应用于各种I/O接口,例如读写网卡、读写硬盘、读写声卡、读写显卡、读写文件等。这种异步I/O模型可以大大提高系统的性能和效率。
IOCP.rar_IOCP_c++ Socket类_iocp.h_socket iocp_完成端口
在使用这些文件进行开发时,你需要理解IOCP的工作原理,包括如何创建和初始化完成端口,如何使用WSASend和WSARecv等异步I/O函数,以及如何处理来自IOCP的完成信号。


网络编程
