Network support for the Lua language

home · download · installation · 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. It is available to any Lua application once it has been properly initialized by the interpreter in use. The code has been tested and runs well on several Windows and UNIX platforms.

Among the support modules, the most commonly used 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 functionality defined by each protocol. 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-2013 Diego Nehab. All rights reserved.
Author: Diego Nehab

## Download

LuaSocket version 3.0-rc1 is now available for download! It is compatible with Lua 5.1 and 5.2, and has been tested on Windows XP, Linux, and Mac OS X. Chances are it works well on most UNIX distributions and Windows flavors.

The current version of the library can be found at the LuaSocket project page on GitHub. Besides the full C and Lua source code for the library, the distribution contains several examples, this user's manual and basic test procedures.

Take a look at the installation section of the manual to find out how to properly install the library.

## Special thanks

This marks the first release of LuaSocket that wholeheartedly embraces the open-source development philosophy. After a long hiatus, Matthew Wild finally convinced me it was time for a release including IPv6 and Lua 5.2 support. It was more work than we anticipated. Special thanks to Sam Roberts, Florian Zeitz, and Paul Aurich, Liam Devine, Alexey Melnichuk, and everybody else that has helped bring this library back to life.

## What's New

Main changes for LuaSocket 3.0-rc1 are IPv6 support and Lua 5.2 compatibility.

- Added: Compatible with Lua 5.2
  - Note that unless you define `LUA_COMPAT_MODULE`, package tables will not be exported as globals!
- Added: IPv6 support;
  - `Socket.connect` and `socket.bind` support IPv6 addresses;
  - `Getpeername` and `getsockname` support IPv6 addresses, and return the socket family as a third value;
  - URL module updated to support IPv6 host names;
  - New `socket.tcp6` and `socket.udp6` functions;
  - New `socket.dns.getaddrinfo` and `socket.dns.getnameinfo` functions;
- Added: `getoption` method;
- Fixed: `url.unescape` was returning additional values;
- Fixed: `mime.qp`, `mime.unqp`, `mime.b64`, and `mime.unb64` could mistaking their own stack slots for functions arguments;
- Fixed: Receiving zero-length datagram is now possible;
- Improved: Hidden all internal library symbols;
- Improved: Better error messages;
- Improved: Better documentation of socket options.
- Fixed: manual sample of HTTP authentication now uses correct "authorization" header (Alexandre Ittner);
- Fixed: failure on bind() was destroying the socket (Sam Roberts);
- Fixed: receive() returns immediatelly if prefix can satisfy bytes requested (M Joonas Pihlaja);
- Fixed: multicast didn't work on Windows, or anywhere else for that matter (Herbert Leuwer, Adrian Sietsma);
- Fixed: select() now reports an error when called with more sockets than FD_SETSIZE (Lorenzo Leonini);
- Fixed: manual links to home.html changed to index.html (Robert Hahn);
- Fixed: mime.unb64() would return an empty string on results that started with a null character (Robert Raschke);
- Fixed: HTTP now automatically redirects on 303 and 307 (Jonathan Gray);
- Fixed: calling sleep() with negative numbers could block forever, wasting CPU. Now it returns immediately (MPB);
- Improved: FTP commands are now sent in upper case to help buggy servers (Anders Eurenius);
- Improved: known headers now sent in canonic capitalization to help buggy servers (Joseph Stewart);
- Improved: Clarified tcp:receive() in the manual (MPB);
- Improved: Decent makefiles (LHF).
- Fixed: RFC links in documentation now point to IETF (Cosmin Apreutesei).

## 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.