【发布时间】:2015-12-10 07:20:00
【问题描述】:
我在进程连接上使用 Net::SocketReactor。当数据输入到套接字时调用类似以下代码:
int WebSocketWrapper::DoRecieve(void *buf) {
try{
int flags;
const auto size = m_sock.availabel();
const auto ret = m_sock.receiveFrame(buf, size, flags);
if (size != ret){
logger.warrning('Read less than available');
}
return ret;
}
catch (WebSocketException& exc){
logger.log(exc);
switch (exc.code()){
case pnet::WebSocket::WS_ERR_HANDSHAKE_UNSUPPORTED_VERSION:
logger.debug("unsuported version");
break;
// fallthrough
case pnet::WebSocket::WS_ERR_NO_HANDSHAKE:
case pnet::WebSocket::WS_ERR_HANDSHAKE_NO_VERSION:
case pnet::WebSocket::WS_ERR_HANDSHAKE_NO_KEY:
logger.debug("Bad request");
break;
}
}
return 0;
}
当数据大小小于 1400 字节时效果很好。 TCP 包未分段。但是当我尝试发送超过 1400 字节的数据时,我有 WebSocketException:“有效负载大小的缓冲区不足”。我正在探索源代码 Poco::Net::Websocket,他发现了冲突。当调用 Websocket::readFrame 时会分析帧头的大小,但我只有部分帧。我可以请求返回 StreamSocket::availabel。
如何从 websocket 中读取大数据?
【问题讨论】:
标签: c++ websocket poco-libraries