1
0
mirror of https://gitee.com/openLuat/LuatOS synced 2025-08-17 22:18:03 +08:00
LuatOS/demo/soc_fota/EC618/libnet.lua
2023-01-31 12:56:29 +08:00

144 lines
3.9 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

local libnet = {}
--- 阻塞等待网卡的网络连接上,只能用于任务函数中
-- @string 任务标志
-- @int 超时时间,如果==0或者空则没有超时一致等待
-- @... 其他参数和socket.linkup一致
-- @return 失败或者超时返回false 成功返回true
function libnet.waitLink(taskName, timeout, ...)
local succ, result = socket.linkup(...)
if not succ then
return false
end
if not result then
result = sys_wait(taskName, socket.LINK, timeout)
else
return true
end
if type(result) == 'table' and result[2] == 0 then
return true
else
return false
end
end
--- 阻塞等待IP或者域名连接上如果加密连接还要等握手完成只能用于任务函数中
-- @string 任务标志
-- @int 超时时间,如果==0或者空则没有超时一致等待
-- @... 其他参数和socket.connect一致
-- @return 失败或者超时返回false 成功返回true
function libnet.connect(taskName,timeout, ... )
local succ, result = socket.connect(...)
if not succ then
return false
end
if not result then
result = sys_wait(taskName, socket.ON_LINE, timeout)
else
return true
end
if type(result) == 'table' and result[2] == 0 then
return true
else
return false
end
end
--- 阻塞等待客户端连接上,只能用于任务函数中
-- @string 任务标志
-- @int 超时时间,如果==0或者空则没有超时一致等待
-- @... 其他参数和socket.listen一致
-- @return 失败或者超时返回false 成功返回true
function libnet.listen(taskName,timeout, ... )
local succ, result = socket.listen(...)
if not succ then
return false
end
if not result then
result = sys_wait(taskName, socket.ON_LINE, timeout)
else
return true
end
if type(result) == 'table' and result[2] == 0 then
return true
else
return false
end
end
--- 阻塞等待数据发送完成,只能用于任务函数中
-- @string 任务标志
-- @int 超时时间,如果==0或者空则没有超时一致等待
-- @... 其他参数和socket.tx一致
-- @return
-- @boolean 失败或者超时返回false缓冲区满了或者成功返回true
-- @boolean 缓存区是否满了
function libnet.tx(taskName,timeout, ...)
local succ, is_full, result = socket.tx(...)
if not succ then
return false, is_full
end
if is_full then
return true, true
end
if not result then
result = sys_wait(taskName, socket.TX_OK, timeout)
else
return true, is_full
end
if type(result) == 'table' and result[2] == 0 then
return true, false
else
return false, is_full
end
end
--- 阻塞等待新的网络事件或者特定事件,只能用于任务函数中
-- @string 任务标志
-- @int 超时时间,如果==0或者空则没有超时一致等待
-- @... 其他参数和socket.wait一致
-- @return
-- @boolean 网络异常返回false其他返回true
-- @table or boolean 超时返回false有新的数据到返回true被其他事件退出的返回接收到的事件
function libnet.wait(taskName,timeout, netc)
local succ, result = socket.wait(netc)
if not succ then
return false,false
end
if not result then
result = sys_wait(taskName, socket.EVENT, timeout)
else
return true,true
end
if type(result) == 'table' then
if result[2] == 0 then
return true, true
else
return false, false
end
else
return true, false
end
end
--- 阻塞等待网络断开连接,只能用于任务函数中
-- @string 任务标志
-- @int 超时时间,如果==0或者空则没有超时一致等待
-- @... 其他参数和socket.close一致
-- @return 无
function libnet.close(taskName,timeout, netc)
local succ, result = socket.discon(netc)
if not succ then
socket.close(netc)
return
end
if not result then
result = sys_wait(taskName, socket.CLOSED, timeout)
else
socket.close(netc)
return
end
socket.close(netc)
end
return libnet