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

This commit is contained in:
Marcel Stör 2017-03-09 22:19:18 +01:00
parent b4319bdb4b
commit e8d5a05952
2 changed files with 18 additions and 0 deletions

View File

@ -324,6 +324,22 @@ srv:on("connection", function(sck, c)
end) end)
srv:connect(80,"httpbin.org") 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 #### See also
- [`net.createServer()`](#netcreateserver) - [`net.createServer()`](#netcreateserver)

View File

@ -148,6 +148,8 @@ srv:on("connection", function(sck, c)
end) end)
srv:connect(443,"google.com") 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 #### See also
- [`tls.createConnection()`](#tlscreateconnection) - [`tls.createConnection()`](#tlscreateconnection)