LuaSocket: Network support for the Lua language
Description: The LuaSocket Homepage
Keywords: Lua, Library, Network, Support, Internet

Network support for the Lua language

home · download · introduction · reference

## What is LuaSocket?

LuaSocket is a Lua extension library that is composed by two parts: a C core that provides support for the TCP and UDP transport layers, and a set of Lua modules that add support for functionality commonly needed by applications that deal with the Internet.

The core support has been implemented so that it is both efficient and simple to use. The core can be used by any Lua application once it has been properly initialized by the interpreter running the Lua application. The code has been tested and runs well on several Windows and Unix platforms.

The most used modules implement the SMTP (sending e-mails), HTTP (WWW access) and FTP (uploading and downloading files) client protocols. These provide a very natural and generic interface to the e functionality covered by the protocols. In addition, you will find that the MIME (common encodings), URL (anything you could possible want to do with one) and LTN12 (filters, sinks, sources and pumps) modules can be very handy.

The library is available under the same terms and conditions as the Lua language, the MIT license. The idea is that if you can use Lua in a project, you should also be able to use LuaSocket.

Copyright © 1999-2004 Tecgraf/PUC-Rio. All rights reserved.
Author: Diego Nehab

## Download

LuaSocket version 2.0 beta2 is now available for download! It is compatible with Lua 5.0 and has been tested on Windows XP, Linux, and Mac OS X.

The library can be downloaded in source code from the following links:

> luasocket-2.0-beta2.tar.gz
> luasocket-2.0-beta2.zip

Besides the full C and Lua source code for the library, the distribution contains several examples, this user's manual and the test procedures.

I am also providing PC Win32 binaries for those that want to give LuaSocket a quick try:

> luasocket-2.0-beta2-win32.zip

The quick and dirty way to use these binaries is to unpack everything into a directory, say `c:\luasocket` (include all Lua files from the LuaSocket distrbitution in the same directory too!). Then set `LUA_INIT` to load the `lua.lua` helper file:

    c:\luasocket\> set LUA_INIT=@lua.lua

From that directory, you can then run the interpreter and it should find all files it needs. To download this manual page from the Internet, for example, do the following:

    c:\luasocket\> lua
    Lua 5.0.2  Copyright (C) 1994-2004 Tecgraf, PUC-Rio
    > http = require"http"
    > print(http.request"http://www.tecgraf.puc-rio.br/luasocket/")
    --> this file

## Special thanks

Throughout LuaSocket's history, many people gave suggestions that helped improve it. For that, I thank the Lua community. Special thanks go to David Burgess, who has helped push the library to a new level of quality and from whom I have learned a lot of stuff that doesn't show up in RFCs. Special thanks also to Carlos Cassino, who played a big part in the extensible design seen in the C core of LuaSocket 2.0. Recently, Mike Pall has been helping a lot too! Thanks to you all!

## What's New

Changes in the 2.0-beta2 were mostly bug-fixes.

- Fixed silly last-minute-change bug in HTTP/SMTP;
- `usocket.c`/`wsocket.c` look nicer thanks to Mike;
- Finally total timeout is reliable on Windows! (found a pretty simple work around);
- UDP has a reasonable maximum datagram size (8k);
- `Receive` accepts the prefix optional argument (good for non-blocking);
- `Send` doesn't support multiple arguments anymore;
- Instead, `send` allows the selection of the substring to be sent (good for non-blocking);
- Fixed bug that caused select return tables not to be associative on windows;
- Should compile with g++;
- New sample unix domain support;
- New sample LPD support;
- Comprehensive error messages;
- New `getstats` and `setstats` methods to help throttling;
- `Listen` defaults to 32 backlog;
- SMTP/FTP/HTTP fail gracefully;
- `accept`/`connect`/`select` interrupt safe
- Fixed bug that didn't set accepted sockets as non-blocking
- New timming functions `sleep` and `gettime` have higher resolution and no wrap around problems;
- Bug fixes in the manual;
- Fixed bug of missing cast in `getfd`.

### Incompatibilities with previous versions

- New `send` inteface doesn't send multiple arguments anymore;
- `Time` is replaced by `gettime` with advantage.

## Old Versions

All previous versions of the LuaSocket library can be downloaded here. Although these versions are no longer supported, they are still available for those that have compatibility issues.