Changed require"luasocket" to require"socket".

This commit is contained in:
Diego Nehab 2004-05-28 20:40:13 +00:00
parent 6c565dd7c0
commit c23240726e
13 changed files with 186 additions and 12 deletions

View File

@ -4,7 +4,7 @@
-- Author: Diego Nehab -- Author: Diego Nehab
-- RCS ID: $Id$ -- RCS ID: $Id$
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
require"luasocket" require"socket"
function get_status(sock, valid) function get_status(sock, valid)
local line, err = sock:receive() local line, err = sock:receive()

View File

@ -4,7 +4,7 @@
-- Author: Diego Nehab -- Author: Diego Nehab
-- RCS ID: $Id$ -- RCS ID: $Id$
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
require"luasocket" require"socket"
host = host or "127.0.0.1" host = host or "127.0.0.1"
port = port or 13 port = port or 13
if arg then if arg then

View File

@ -4,7 +4,7 @@
-- Author: Diego Nehab -- Author: Diego Nehab
-- RCS ID: $Id$ -- RCS ID: $Id$
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
require"luasocket" require"socket"
host = host or "localhost" host = host or "localhost"
port = port or 7 port = port or 7
if arg then if arg then

View File

@ -4,7 +4,7 @@
-- Author: Diego Nehab -- Author: Diego Nehab
-- RCS ID: $Id$ -- RCS ID: $Id$
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
require"luasocket" require"socket"
host = host or "127.0.0.1" host = host or "127.0.0.1"
port = port or 7 port = port or 7
if arg then if arg then

View File

@ -6,7 +6,7 @@
-- RCS ID: $Id$ -- RCS ID: $Id$
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
-- make sure LuaSocket is loaded -- make sure LuaSocket is loaded
require("luasocket") require("socket")
-- get LuaSocket namespace -- get LuaSocket namespace
local socket = _G[LUASOCKET_LIBNAME] local socket = _G[LUASOCKET_LIBNAME]

View File

@ -6,7 +6,7 @@
-- RCS ID: $Id$ -- RCS ID: $Id$
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
-- make sure LuaSocket is loaded -- make sure LuaSocket is loaded
require("luasocket") require("socket")
-- get LuaSocket namespace -- get LuaSocket namespace
local socket = _G[LUASOCKET_LIBNAME] local socket = _G[LUASOCKET_LIBNAME]

View File

@ -6,7 +6,7 @@
-- RCS ID: $Id$ -- RCS ID: $Id$
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
-- make sure LuaSocket is loaded -- make sure LuaSocket is loaded
require"luasocket" require"socket"
-- get LuaSocket namespace -- get LuaSocket namespace
local socket = _G[LUASOCKET_LIBNAME] local socket = _G[LUASOCKET_LIBNAME]

174
src/socket.lua Normal file
View File

@ -0,0 +1,174 @@
-----------------------------------------------------------------------------
-- LuaSocket helper module
-- Author: Diego Nehab
-- RCS ID: $Id$
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
-- Load LuaSocket from dynamic library
-- Comment these lines if you are loading static
-----------------------------------------------------------------------------
open, err1, err2 = loadlib("luasocket", "luaopen_socket")
if not open then error(err1) end
open()
if not LUASOCKET_LIBNAME then error("LuaSocket init failed") end
-----------------------------------------------------------------------------
-- Namespace independence
-----------------------------------------------------------------------------
local socket = _G[LUASOCKET_LIBNAME]
if not socket then error('LuaSocket init failed') end
-----------------------------------------------------------------------------
-- Auxiliar functions
-----------------------------------------------------------------------------
function socket.connect(address, port, laddress, lport)
local sock, err = socket.tcp()
if not sock then return nil, err end
if laddress then
local res, err = sock:bind(laddress, lport, -1)
if not res then return nil, err end
end
local res, err = sock:connect(address, port)
if not res then return nil, err end
return sock
end
function socket.bind(host, port, backlog)
local sock, err = socket.tcp()
if not sock then return nil, err end
sock:setoption("reuseaddr", true)
local res, err = sock:bind(host, port)
if not res then return nil, err end
backlog = backlog or 1
res, err = sock:listen(backlog)
if not res then return nil, err end
return sock
end
function socket.choose(table)
return function(name, opt1, opt2)
if type(name) ~= "string" then
name, opt1, opt2 = "default", name, opt1
end
local f = table[name or "nil"]
if not f then error("unknown key (" .. tostring(name) .. ")", 3)
else return f(opt1, opt2) end
end
end
-----------------------------------------------------------------------------
-- Socket sources and sinks, conforming to LTN12
-----------------------------------------------------------------------------
-- create namespaces inside LuaSocket namespace
socket.sourcet = {}
socket.sinkt = {}
socket.BLOCKSIZE = 2048
socket.sinkt["http-chunked"] = function(sock)
return setmetatable({
getfd = function() return sock:getfd() end,
dirty = function() return sock:dirty() end
}, {
__call = function(self, chunk, err)
if not chunk then return sock:send("0\r\n\r\n") end
local size = string.format("%X\r\n", string.len(chunk))
return sock:send(size, chunk, "\r\n")
end
})
end
socket.sinkt["close-when-done"] = function(sock)
return 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
socket.sinkt["keep-open"] = function(sock)
return setmetatable({
getfd = function() return sock:getfd() end,
dirty = function() return sock:dirty() end
}, {
__call = function(self, chunk, err)
return sock:send(chunk)
end
})
end
socket.sinkt["default"] = socket.sinkt["keep-open"]
socket.sink = socket.choose(socket.sinkt)
socket.sourcet["by-length"] = function(sock, length)
return 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
socket.sourcet["until-closed"] = function(sock)
return setmetatable({
getfd = function() return sock:getfd() end,
dirty = function() return sock:dirty() end
}, {
__call = ltn12.source.simplify(function()
local chunk, err, partial = sock:receive(socket.BLOCKSIZE)
if not err then return chunk
elseif err == "closed" then
sock:close()
return partial, ltn12.source.empty()
else return nil, err end
end)
})
end
socket.sourcet["http-chunked"] = function(sock)
return setmetatable({
getfd = function() return sock:getfd() end,
dirty = function() return sock:dirty() end
}, {
__call = function()
-- get chunk size, skip extention
local line, err = sock:receive()
if err then return nil, err end
local size = tonumber(string.gsub(line, ";.*", ""), 16)
if not size then return nil, "invalid chunk size" end
-- was it the last chunk?
if size <= 0 then
-- skip trailer headers, if any
local line, err = sock:receive()
while not err and line ~= "" do
line, err = sock:receive()
end
return nil, err
else
-- get chunk and skip terminating CRLF
local chunk, err = sock:receive(size)
if err or socket.skip(2, sock:receive()) then return nil, err
else return chunk end
end
end
})
end
socket.sourcet["default"] = socket.sourcet["until-closed"]
socket.source = socket.choose(socket.sourcet)

View File

@ -6,7 +6,7 @@
-- RCS ID: $Id$ -- RCS ID: $Id$
---------------------------------------------------------------------------- ----------------------------------------------------------------------------
-- make sure LuaSocket is loaded -- make sure LuaSocket is loaded
require"luasocket" require("socket")
-- get LuaSocket namespace -- get LuaSocket namespace
local socket = _G[LUASOCKET_LIBNAME] local socket = _G[LUASOCKET_LIBNAME]
-- create url namespace inside LuaSocket namespace -- create url namespace inside LuaSocket namespace

View File

@ -1,4 +1,4 @@
require "luasocket" require "socket"
require "ltn12" require "ltn12"
require "mime" require "mime"

View File

@ -1,4 +1,4 @@
require "luasocket" require"socket"
host = host or "localhost" host = host or "localhost"
port = port or "8080" port = port or "8080"

View File

@ -43,7 +43,7 @@ mesgt = {
-- sink = ltn12.sink.file(io.stdout) -- sink = ltn12.sink.file(io.stdout)
-- source = ltn12.source.chain(socket.smtp.message(mesgt), socket.smtp.stuff()) -- source = ltn12.source.chain(socket.smtp.message(mesgt), socket.smtp.stuff())
-- ltn12.pump(source, sink) -- ltn12.pump.all(source, sink)
print(socket.smtp.send { print(socket.smtp.send {
rcpt = "<diego@cs.princeton.edu>", rcpt = "<diego@cs.princeton.edu>",

View File

@ -1,4 +1,4 @@
require "luasocket" require"socket"
host = host or "localhost" host = host or "localhost"
port = port or "8080" port = port or "8080"