Browse Source

Document that the socket receive event is fired for every frame, fixes #1849

Marcel Stör 7 years ago
parent
commit
e8d5a05952
2 changed files with 18 additions and 0 deletions
  1. 16 0
      docs/en/modules/net.md
  2. 2 0
      docs/en/modules/tls.md

+ 16 - 0
docs/en/modules/net.md

@@ -324,6 +324,22 @@ srv:on("connection", function(sck, c)
 end)
 srv:connect(80,"httpbin.org")
 ```
+!!! note
+    The `receive` event is fired for every network frame! Hence, if the data sent to the device exceeds 1460 bytes (derived from [Ethernet frame size](https://en.wikipedia.org/wiki/Ethernet_frame)) it will fire more than once. There may be other situations where incoming data is split across multiple frames (e.g. HTTP POST with `multipart/form-data`). You need to manually buffer the data and find means to determine if all data was received.
+    
+```lua
+local buffer = nil
+
+srv:on("receive", function(sck, c)
+  if buffer == nil then
+    buffer = c
+  else
+    buffer = buffer .. c
+  end
+end)
+-- throttling could be implemented using socket:hold()
+-- example: https://github.com/nodemcu/nodemcu-firmware/blob/master/lua_examples/pcm/play_network.lua#L83
+```    
 
 #### See also
 - [`net.createServer()`](#netcreateserver)

+ 2 - 0
docs/en/modules/tls.md

@@ -148,6 +148,8 @@ srv:on("connection", function(sck, c)
 end)
 srv:connect(443,"google.com")
 ```
+!!! note
+    The `receive` event is fired for every network frame! See details at [net.socket:on()](net.md#netsocketon).
 
 #### See also
 - [`tls.createConnection()`](#tlscreateconnection)