libwebsocket发送有效负载限制

时间:2015-05-04 10:37:50

标签: c networking websocket libwebsockets

我有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中的数据大小是否有限制?

  • 任何扩展缓冲区有效负载值的方法?

2 个答案:

答案 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,在部分写入时,您需要知道发送了多少字节以及剩余多少字节要发送,这样您可以在套接字再次写入时尝试写入其余的字节。但是这个库只提供一个数字。没有办法说出这两件事。

(您不能从要发送的字节数中减去,因为编码数据大于未编码的数据。)