源战役客户端
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 
 

149 行
4.7 KiB

-- -----------------------------------------------------------------------------
-- -- LuaSocket helper module
-- -- Author: Diego Nehab
-- -----------------------------------------------------------------------------
-- -----------------------------------------------------------------------------
-- -- Declare module and import dependencies
-- -----------------------------------------------------------------------------
-- local base = _G
-- local string = require("string")
-- local math = require("math")
-- local socket = require("socket.core")
-- local _M = socket
-- -----------------------------------------------------------------------------
-- -- Exported auxiliar functions
-- -----------------------------------------------------------------------------
-- function _M.connect4(address, port, laddress, lport)
-- return socket.connect(address, port, laddress, lport, "inet")
-- end
-- function _M.connect6(address, port, laddress, lport)
-- return socket.connect(address, port, laddress, lport, "inet6")
-- end
-- function _M.bind(host, port, backlog)
-- if host == "*" then host = "0.0.0.0" end
-- local addrinfo, err = socket.dns.getaddrinfo(host);
-- if not addrinfo then return nil, err end
-- local sock, res
-- err = "no info on address"
-- for i, alt in base.ipairs(addrinfo) do
-- if alt.family == "inet" then
-- sock, err = socket.tcp4()
-- else
-- sock, err = socket.tcp6()
-- end
-- if not sock then return nil, err end
-- sock:setoption("reuseaddr", true)
-- res, err = sock:bind(alt.addr, port)
-- if not res then
-- sock:close()
-- else
-- res, err = sock:listen(backlog)
-- if not res then
-- sock:close()
-- else
-- return sock
-- end
-- end
-- end
-- return nil, err
-- end
-- _M.try = _M.newtry()
-- function _M.choose(table)
-- return function(name, opt1, opt2)
-- if base.type(name) ~= "string" then
-- name, opt1, opt2 = "default", name, opt1
-- end
-- local f = table[name or "nil"]
-- if not f then base.error("unknown key (".. base.tostring(name) ..")", 3)
-- else return f(opt1, opt2) end
-- end
-- end
-- -----------------------------------------------------------------------------
-- -- Socket sources and sinks, conforming to LTN12
-- -----------------------------------------------------------------------------
-- -- create namespaces inside LuaSocket namespace
-- local sourcet, sinkt = {}, {}
-- _M.sourcet = sourcet
-- _M.sinkt = sinkt
-- _M.BLOCKSIZE = 2048
-- sinkt["close-when-done"] = function(sock)
-- return base.setmetatable({
-- getfd = function() return sock:getfd() end,
-- dirty = function() return sock:dirty() end
-- }, {
-- __call = function(self, chunk, err)
-- if not chunk then
-- sock:close()
-- return 1
-- else return sock:send(chunk) end
-- end
-- })
-- end
-- sinkt["keep-open"] = function(sock)
-- return base.setmetatable({
-- getfd = function() return sock:getfd() end,
-- dirty = function() return sock:dirty() end
-- }, {
-- __call = function(self, chunk, err)
-- if chunk then return sock:send(chunk)
-- else return 1 end
-- end
-- })
-- end
-- sinkt["default"] = sinkt["keep-open"]
-- _M.sink = _M.choose(sinkt)
-- sourcet["by-length"] = function(sock, length)
-- return base.setmetatable({
-- getfd = function() return sock:getfd() end,
-- dirty = function() return sock:dirty() end
-- }, {
-- __call = function()
-- if length <= 0 then return nil end
-- local size = math.min(socket.BLOCKSIZE, length)
-- local chunk, err = sock:receive(size)
-- if err then return nil, err end
-- length = length - string.len(chunk)
-- return chunk
-- end
-- })
-- end
-- sourcet["until-closed"] = function(sock)
-- local done
-- return base.setmetatable({
-- getfd = function() return sock:getfd() end,
-- dirty = function() return sock:dirty() end
-- }, {
-- __call = function()
-- if done then return nil end
-- local chunk, err, partial = sock:receive(socket.BLOCKSIZE)
-- if not err then return chunk
-- elseif err == "closed" then
-- sock:close()
-- done = 1
-- return partial
-- else return nil, err end
-- end
-- })
-- end
-- sourcet["default"] = sourcet["until-closed"]
-- _M.source = _M.choose(sourcet)
-- return _M