如何处理套接字
How to process sockets
我必须处理从两个套接字接收的数据。考虑以下模式:
struct Session {
Session() { /*...*/ }
void process() {
while (socket->recv()) {/*...*/}
}
private:
Socket* socket;
};
struct SessionWrapper {
SessionWrapper() { /*...*/ }
Command cmd;
Session s{/*..*/};
void process() {
while ((cmd = socket->recv()) != Stop) {
if (cmd == StartSession) {
s.process();
} else if (cms == StopSession) {
// ...
break;
}
}
}
private:
SocketCmd* socket;
};
int main() {
SessionWrapper w{/*...*/};
w.process();
}
问题是,当Start
从SessionWrapper
中的套接字接收时,负责处理嵌套Session
中的套接字的循环也开始了。这也意味着现在没有办法处理来自SessionWrapper的任何StopSession(或其他命令)。
您只需要异步处理Session
。
如果你能更好地描述你想达到的目标(而不是如何),我可能会更具体
相关文章:
- 使用单个套接字处理多个传入的 UDP 连接
- 处理套接字的WSA_IO_PENDING ::发送
- 套接字 read() 函数在处理隧道时有时从不返回 0
- 跨平台套接字发送,Linux 上的缓冲区常量无效* Windows上的常量字符*,最佳处理方式
- 处理插座Boost ASIO TCP IP -C 套接字编程
- Boost ASIO UDP 套接字async_receive_from不调用处理程序
- C++ Opencv - 通过套接字获取后的图像处理
- 使用 Boost ASIO 处理没有套接字的 TCP
- 处理客户端连接的最有效方法(套接字编程)
- 如何处理在同一套接字上发布多个操作的情况
- c++tcp多线程客户端/服务器-如何与线程套接字处理程序进行通信
- 加速和 Windows 套接字 - 正确处理 TCP 客户端断开连接方案
- 处理 POSIX 套接字读取() 错误
- 处理"非阻塞"套接字连接
- 关于处理超过 1024 个套接字描述符
- 为什么套接字未正确处理此缓冲区大小
- 从套接字递归处理数据
- 处理一个套接字和多个线程时异步 IO 的用例
- 多线程:字符移动、绘图和套接字处理
- 如何从一个UDP套接字处理多个客户端