Quick
index
main
eev
maths
blogme
dednat4
littlelangs
PURO
(GAC2,
λ, etc)
(Chapa 1)

emacs
lua
(la)tex
fvwm
tcl
forth
icon
debian
irc
contact

LuaSocket

Its main page: http://www.cs.princeton.edu/~diego/professional/luasocket/.

QUick index:


Compiling Lua with LuaSocket statically linked in on AIX

E-mails on the mailing list: on 2005-12, msgs 313, 314, 320.

The executable version of the e-script below lives here.

Ingredients: bash, ~/lua-5.0.2.tar.gz, ~/luasocket-2.0.tar.gz.

#----
#
# Lua: unpack, make the ".o"s, the ".a"s, lua, and luac
#
#----

rm -Rf ~/usrc/lua-5.0.2/
cd     ~/usrc/
gunzip <    ~/lua-5.0.2.tar.gz | tar -xvf -
cd     ~/usrc/lua-5.0.2/

cat >> config <<'%%%'
LOADLIB= -DUSE_DLOPEN=1
DLLIB= -ldl
# MYLDFLAGS= -Wl,-E
MYLDFLAGS=
EXTRA_LIBS= -lm -ldl
%%%

make CC=cc \
   CFLAGS="-I$HOME/usrc/lua-5.0.2/include/ \
           -I$HOME/usrc/lua-5.0.2/src/ -DUSE_POPEN=1" \
 2>&1 | tee om

# A test:
bin/lua -e 'for li in io.popen("ls bin/"):lines() do print("! "..li) end' \
 2>&1 | tee ol

#----
#
# Luasocket: unpack, make luasocket.so
# (we won't use the .so, but this produces the ".o"s as a side-effect)
#
#----

rm -Rf ~/usrc/luasocket-2.0/
cd     ~/usrc/
gunzip    < ~/luasocket-2.0.tar.gz | tar -xvf -
cd     ~/usrc/luasocket-2.0/
rm        src/compat-5.1r4/*.o

LUA50DIR=$HOME/usrc/lua-5.0.2
make CC=cc LD=cc \
  CFLAGS="-I$LUA50DIR/include/ -I$LUA50DIR/src/ -I$PWD/src/compat-5.1r4/" \
  LDFLAGS="-qmkshrobj -L$LUA50DIR/lib/ -llua -llualib" \
  SOCKET_SO=socket.so \
  2>&1 | tee om

#----
#
# Luasocket: make libluasocket.a
#
#----

cd ~/usrc/luasocket-2.0/src/
ar rcu ../../lua-5.0.2/lib/libluasocket.a \
  compat-5.1r4/compat-5.1.o \
  luasocket.o timeout.o buffer.o io.o auxiliar.o options.o inet.o \
  tcp.o udp.o except.o select.o usocket.o \
  mime.o
ranlib ../../lua-5.0.2/lib/libluasocket.a

#----
#
# Lua: make preload_socket.c, luasocket.o, luasocket
# (luasocket = lua + libluasocket.a)
#
#----

cd ~/usrc/lua-5.0.2/src/lua/

cat > preload_socket.c <<'%%%'
extern int luaopen_socket_core(lua_State *L);
extern int luaopen_mime_core(lua_State *L);
/*
 * written by prec from #lua@freenode
 */
LUALIB_API int preload_socket (lua_State *L) {
  lua_pushliteral(L, "package");             /* "package" */
  lua_newtable(L);                           /* "package" T1 */
  lua_pushliteral(L, "preload");             /* "package" T1 "preload" */
  lua_newtable(L);                           /* "package" T1 "preload" T2 */
  lua_pushliteral(L, "socket.core");         /* ... T2 name */
  lua_pushcfunction(L, luaopen_socket_core); /* ... T2 name func */
  lua_settable(L, -3);                       /* ... T2 */
  lua_pushliteral(L, "mime.core");           /* ... T2 name */
  lua_pushcfunction(L, luaopen_mime_core);   /* ... T2 name func */
  lua_settable(L, -3);                       /* "package" T1 "preload" T2 */
  lua_settable(L, -3);                       /* "package" T1 */
  lua_settable(L, LUA_GLOBALSINDEX);         /* */
  return 0;
}
%%%

cc -I$HOME/usrc/lua-5.0.2/include/ -I$HOME/usrc/lua-5.0.2/src/ \
  -DLUA_USERCONFIG='"preload_socket.c"'     \
  -DLUA_EXTRALIBS="{NULL, preload_socket}," \
  -c -o luasocket.o lua.c

cd ~/usrc/lua-5.0.2/src/lua/
cc -o ../../bin/luasocket  luasocket.o -L../../lib \
  -llua -llualib -lluasocket -lm -ldl

#----
#
# Luasocket: install ".lua"s in ~/.lua50/
# (We don't use the ".so"s)
# See: http://www.cs.princeton.edu/~diego/professional/luasocket/installation.html
#
#----

rm -Rf   ~/.lua50/socket/
rm -Rf   ~/.lua50/mime/
rm -f    ~/.lua50/{compat-5.1,ltn12,socket,mime}.lua

mkdir -p ~/.lua50/
mkdir -p ~/.lua50/socket/
mkdir -p ~/.lua50/mime/
cd  ~/usrc/luasocket-2.0/
cd  ~/usrc/luasocket-2.0/src/
cp  compat-5.1r4/compat-5.1.lua               ~/.lua50/
cp  ltn12.lua socket.lua mime.lua             ~/.lua50/
cp  http.lua tp.lua ftp.lua smtp.lua url.lua  ~/.lua50/socket/

#----
#
# Lua: install the binaries (lua, luac, luasocket) in ~/bin/
#
#----

cd ~/bin/
ln -sf ../usrc/lua-5.0.2/bin/lua .
ln -sf ../usrc/lua-5.0.2/bin/luac .
ln -sf ../usrc/lua-5.0.2/bin/luasocket .

#----
#
# luasocket: a test (just check if, e.g., "try" gets loaded)
#
#----

export LUA_INIT="@$HOME/.lua50/compat-5.1.lua"
export  LUA_PATH="$HOME/.lua50/?.lua;?.lua"
export LUA_CPATH="$HOME/.lua50/?.dll;?.dll"

luasocket -e '
  require "socket"
  pt = function(str, T) for k,v in T do print(str, k, v) end end
  pt("socket", socket)
'


TinyFTP.lua/MyFTP.lua

Why: see http://angg.twu.net/w32.html.

Code:

A minimal HTTP server written in LuaSocket

RFCs about http: rfc1945, e-script

Inspired by dustmote.

Status: not working yet...