mirror of
https://github.com/lunarmodules/luasocket.git
synced 2024-11-08 14:28:21 +01:00
Bug in poll.
Debug garbage in compat-5.1.c. Improvements to the user manual.
This commit is contained in:
parent
6abfbc742b
commit
4e5ad6d5ee
@ -47,22 +47,20 @@ functionality commonly needed by applications that deal with the Internet.
|
||||
|
||||
<p>
|
||||
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.
|
||||
</p>
|
||||
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. </p>
|
||||
|
||||
<p>
|
||||
The most used modules implement the
|
||||
Among the support modules, the most commonly used implement the
|
||||
<a href=smtp.html>SMTP</a>
|
||||
(sending e-mails),
|
||||
<a href=http.html>HTTP</a>
|
||||
(WWW access) and
|
||||
<a href=ftp.html>FTP</a>
|
||||
(uploading and downloading files) client
|
||||
protocols. These provide a very natural and generic interface to the e
|
||||
functionality covered by the protocols.
|
||||
protocols. These provide a very natural and generic interface to the
|
||||
functionality defined by each protocol.
|
||||
In addition, you will find that the
|
||||
<a href=mime.html>MIME</a> (common encodings),
|
||||
<a href=url.html>URL</a>
|
||||
@ -107,12 +105,12 @@ The library can be downloaded in source code from the following links:
|
||||
|
||||
<p>
|
||||
Besides the full C and Lua source code for the library, the distribution
|
||||
contains several examples, this user's manual and the test procedures.
|
||||
contains several examples, this user's manual and basic test procedures.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
I am also providing PC Win32 binaries for those that want to give
|
||||
LuaSocket a quick try:
|
||||
LuaSocket a try (Those on Unix or Mac OS X can just type <tt>make</tt>):
|
||||
</p>
|
||||
|
||||
<blockquote>
|
||||
@ -126,12 +124,12 @@ The quick and dirty way to use these binaries is to unpack everything into a
|
||||
directory, say <tt>c:\luasocket</tt> (include all Lua files from the
|
||||
LuaSocket distrbitution in the same directory too!).
|
||||
Then set <tt>LUA_INIT</tt> to load the <tt>compat-5.1.lua</tt> and set
|
||||
<tt>LUA_PATH</tt> and <tt>LUA_CPATH</tt> to look for files in that
|
||||
<tt>LUA_PATH</tt> and <tt>LUA_CPATH</tt> to look for files in the current
|
||||
directory:
|
||||
</p>
|
||||
|
||||
<pre class=example>
|
||||
c:\luasocket\> set LUA_INIT=@compat-5.1.lua
|
||||
c:\luasocket\> set LUA_INIT=@c:\luasocket\compat-5.1.lua
|
||||
c:\luasocket\> set LUA_CPATH=?.dll
|
||||
c:\luasocket\> set LUA_PATH=?.lua
|
||||
</pre>
|
||||
@ -147,12 +145,12 @@ 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 gets dumped to terminal
|
||||
--> the source to this webpage gets dumped to terminal
|
||||
</pre>
|
||||
|
||||
<p> Take a look at the <a href=instalation.html>installation</a> section of
|
||||
the manual to find out how to properly install the library after you are
|
||||
done playing with it. </p>
|
||||
<p> When you are done playing, take a look at the
|
||||
<a href=instalation.html>installation</a> section of the manual to find out
|
||||
how to properly install the library. </p>
|
||||
|
||||
<!-- thanks +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
|
||||
|
||||
@ -175,7 +173,7 @@ has been helping a lot too! Thanks to you all!
|
||||
|
||||
<p>
|
||||
The big change for the 2.0 (beta3) release was the adoption of the Lua 5.1
|
||||
package proposal. There were several bug fixes too (a beta is a
|
||||
package proposal. Naturally, there were a few bug fixes (a beta is a
|
||||
beta, is a beta).
|
||||
</p>
|
||||
|
||||
@ -195,7 +193,7 @@ beta, is a beta).
|
||||
<li> Fixed <tt>udp:sendto</tt> to call <tt>sock_sendto</tt> instead of
|
||||
<tt>sock_send</tt>;
|
||||
<li> <tt>close</tt> wasn't returning 1!
|
||||
<li> <tt>socket.gettime</tt> returns time since Unix Epoch 1/1/1970 (UTC)
|
||||
<li> <tt>socket.gettime</tt> returns time since Unix Epoch 1/1/1970 (UTC);
|
||||
<li> <tt>socket.sleep</tt> is robust to interrupts;
|
||||
<li> <tt>socket.select</tt> wasn't calling <tt>tm_markstart</tt>;
|
||||
<li> <tt>http.PROXY</tt> wasn't working.
|
||||
@ -206,8 +204,8 @@ beta, is a beta).
|
||||
<h3 id=incompatible>Incompatibilities with previous versions</h3>
|
||||
|
||||
<ul>
|
||||
<li> Namespaces are hierarchical again. This means that whoever called
|
||||
<tt>require("url")</tt> should update their code to
|
||||
<li> Namespaces are hierarchical again. This means that whoever used to
|
||||
call <tt>require("url")</tt> should update their code to
|
||||
<tt>require("socket.url")</tt>.
|
||||
</ul>
|
||||
|
||||
|
@ -39,24 +39,32 @@ Installation">
|
||||
|
||||
<h2>Instalation</h2>
|
||||
|
||||
<p> LuaSocket 2.0 uses the new package proposal for Lua 5.1, throught the
|
||||
compatibility module <a href=http://www.keplerproject.org/compat/>
|
||||
Compat-5.1</a> released in conjunction with Roberto Ierusalimschy and <a
|
||||
href=http://www.keplerproject.org/">The Kepler project</a>. The proposal
|
||||
was considered important enough by the community to justify early adoption.
|
||||
All Lua library developers are encouraged to change their libraries in
|
||||
preparation for the release of Lua 5.1. </p>
|
||||
<p> LuaSocket 2.0 uses the new package proposal for Lua 5.1.
|
||||
All Lua library developers are encouraged to update their libraries so that
|
||||
all libraries can coexist peacefully and users can benefit from the
|
||||
standardization and flexibility of the standard.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The proposal was considered important enough by some of us to justify
|
||||
early adoption, even before release of Lua 5.1.
|
||||
Thus, a compability module
|
||||
<a href=http://www.keplerproject.org/compat/>compat-5.1</a>
|
||||
has been released in conjunction with Roberto Ierusalimschy and <a
|
||||
href=http://www.keplerproject.org/">The Kepler Project</a> team.
|
||||
It implements the Lua 5.1 package proposal on top of Lua 5.0. </p>
|
||||
|
||||
<p> As far as LuaSocket is concerned, this means that whoever is
|
||||
deploying a solution that uses LuaSocket has a lot of freedom. Here we
|
||||
describe only the standard distribution. If the standard doesn't meet your
|
||||
needs, we refer you to the Lua discussion list, where any quesetion about
|
||||
the package scheme will likely be answered promptly.
|
||||
deploying a non-standard distribution of LuaSocket will probably
|
||||
have no problems customizing it. Here we will only describe the standard distribution. If the standard doesn't meet your
|
||||
needs, we refer you to the Lua discussion list, where any question about
|
||||
the package scheme will likely already have been answered.
|
||||
</p>
|
||||
|
||||
<h3>Directory structure</h3>
|
||||
|
||||
<p> The new package scheme has a root directory for the libraries installed
|
||||
<p> The standard distribution reserves a directory to be the root of
|
||||
the libraries installed
|
||||
on a given system. Let's call this directory <tt><ROOT></tt>.
|
||||
On my system, this is the <tt>/usr/local/share/lua/5.0</tt> directory.
|
||||
Here is the standard LuaSocket distribution directory structure:</p>
|
||||
@ -82,7 +90,7 @@ X, they would be replaced by <tt>lsocket.dylib</tt> and
|
||||
|
||||
<p> In order for the interpreter to find all LuaSocket components, three
|
||||
environment variables need to be set. The first environment variable tells
|
||||
the interpreter to load the <tt>compat-5.1.lua</tt> module. </p>
|
||||
the interpreter to load the <tt>compat-5.1.lua</tt> module at startup: </p>
|
||||
|
||||
<pre class=example>
|
||||
LUA_INIT=@<ROOT>/compat-5.1.lua
|
||||
@ -98,7 +106,7 @@ LUA_CPATH=<ROOT>/?.dll;?.dll
|
||||
</pre>
|
||||
|
||||
<p> Again, naturally, in Unix the shared library extension would be
|
||||
<tt>.so</tt> instead of <tt>.dll</tt> and on Mac OS X they would be
|
||||
<tt>.so</tt> instead of <tt>.dll</tt> and on Mac OS X it would be
|
||||
<tt>.dylib</tt></p>
|
||||
|
||||
<h3>Using LuaSocket</h3>
|
||||
@ -115,7 +123,7 @@ Lua 5.0.2 Copyright (C) 1994-2004 Tecgraf, PUC-Rio
|
||||
</pre>
|
||||
|
||||
<p> Each module loads their dependencies automatically, so you only need to
|
||||
load the modues you are directly dependent upon. <p>
|
||||
load the modues you directly depend upon: <p>
|
||||
|
||||
<pre class=example>
|
||||
Lua 5.0.2 Copyright (C) 1994-2004 Tecgraf, PUC-Rio
|
||||
|
@ -58,7 +58,7 @@ interface to I/O across different domains and operating systems.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The LuaSocket API was designed with two goals in mind. First, users
|
||||
The API design had two goals in mind. First, users
|
||||
experienced with the C API to sockets should feel comfortable using LuaSocket.
|
||||
Second, the simplicity and the feel of the Lua language should be
|
||||
preserved. To achieve these goals, the LuaSocket API keeps the function names and semantics the C API whenever possible, but their usage in Lua has been greatly simplified.
|
||||
@ -94,7 +94,7 @@ call might perform several OS calls, so that the two timeout values are
|
||||
Finally, the host name resolution is transparent, meaning that most
|
||||
functions and methods accept both IP addresses and host names. In case a
|
||||
host name is given, the library queries the system's resolver and
|
||||
tries the main returned IP address. Note that direct use of IP addresses
|
||||
tries the main IP address returned. Note that direct use of IP addresses
|
||||
is more efficient, of course. The
|
||||
<a href=dns.html#toip><tt>toip</tt></a>
|
||||
and <a href=dns.html#tohostname><tt>tohostname</tt></a>
|
||||
@ -299,14 +299,14 @@ io.write(socket.try((udp:receive())))
|
||||
|
||||
<!-- More +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
|
||||
|
||||
<h3 id=more>Much more</h3>
|
||||
<h3 id=more>Support modules</h3>
|
||||
|
||||
<p> LuaSocket offers much more than TCP and UDP support. As the library
|
||||
<p> Although not covered in the introduction, LuaSocket offers
|
||||
much more than TCP and UDP functionality. As the library
|
||||
evolved, support for <a href=http.html>HTTP</a>, <a href=ftp.html>FTP</a>,
|
||||
<a href=smtp.html>SMTP</a>, <a href=mime.html>MIME</a>, <a
|
||||
href=url.html>URLs</a> and much more was made available.</a> These are
|
||||
mostly implemented in Lua itself, with critical parts implemented in C for
|
||||
efficiency</p>
|
||||
and <a href=smtp.html>SMTP</a> were built on top of these. These modules
|
||||
and many others are covered by the <a href=reference.html>reference manual</a>.
|
||||
</p>
|
||||
|
||||
<!-- footer +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
|
||||
|
||||
|
@ -16,7 +16,7 @@
|
||||
/*-------------------------------------------------------------------------*\
|
||||
* Wait for readable/writable/connected socket with timeout
|
||||
\*-------------------------------------------------------------------------*/
|
||||
#ifndef SOCK_SELECT
|
||||
#ifdef SOCK_POLL
|
||||
#include <sys/poll.h>
|
||||
|
||||
#define WAITFD_R POLLIN
|
||||
@ -29,8 +29,10 @@ static int sock_waitfd(int fd, int sw, p_tm tm) {
|
||||
pfd.events = sw;
|
||||
pfd.revents = 0;
|
||||
if (tm_iszero(tm)) return IO_TIMEOUT; /* optimize timeout == 0 case */
|
||||
do ret = poll(&pfd, 1, (int)(tm_getretry(tm)*1e3));
|
||||
while (ret == -1 && errno == EINTR);
|
||||
do {
|
||||
int t = (int)(tm_getretry(tm)*1e3);
|
||||
ret = poll(&pfd, 1, t >= 0? t: -1);
|
||||
} while (ret == -1 && errno == EINTR);
|
||||
if (ret == -1) return errno;
|
||||
if (ret == 0) return IO_TIMEOUT;
|
||||
if (sw == WAITFD_C && (pfd.revents & (POLLIN|POLLERR))) return IO_CLOSED;
|
||||
|
Loading…
Reference in New Issue
Block a user