我有libwebsocket客户端发送二进制数据。我已将二进制数据保存到缓冲区中[即buf]并写入socket。
n = libwebsocket_write(wsi,
&buf[LWS_SEND_BUFFER_PRE_PADDING], l, opts | LWS_WRITE_BINARY);
我的问题是socket只能写22392个字节[因为我已收到n = 22392]。当我的l> = 22392字节时,它被注意为部分写入。此值因各种体系结构而异。
问题:
libwebsocket中的数据大小是否有限制?
任何扩展缓冲区有效负载值的方法?
答案 0 :(得分:6)
我得到了我的问题的答案。这是阻止我的数据的有效负载值。根据数据大小调整有效负载值。
struct libwebsocket_protocols {
const char * name;
callback_function * callback;
size_t per_session_data_size;
size_t rx_buffer_size;
unsigned int id;
struct libwebsocket_context * owning_server;
int protocol_index;
};
<强> rx_buffer_size 强>
你应该把它设置为你支持的最大法律框架的大小。
将rx_buffer_size设置为65536后,我可以完全写入数据。
这里的链接对我有帮助
https://libwebsockets.org/trac/libwebsockets/ticket/40
https://libwebsockets.org/libwebsockets-api-doc.html
答案 1 :(得分:0)
要么不使用此库,要么使用阻塞套接字。该库没有提供非阻塞I / O的理智方法。要进行理智的非阻塞I / O,在部分写入时,您需要知道发送了多少字节以及剩余多少字节要发送,这样您可以在套接字再次写入时尝试写入其余的字节。但是这个库只提供一个数字。没有办法说出这两件事。
(您不能从要发送的字节数中减去,因为编码数据大于未编码的数据。)