SYNOPSIS
#include <comm.h>
int net_connect(string host, int port)
DESCRIPTION
Open a non-blocking TCP network connection to <host> and
<port>. On success, the connection is bound to the current
object and the lfun logon() is called in the object.
Returns one of the following values:
NC_SUCCESS Success
NC_EUNKNOWNHOST the host address could not be resolved
NC_ENOSOCKET error during socket creation
NC_ENOBIND socket could not be bound
NC_ENOCONNECT socket could not be connected
(Details of the last three errors can be found in the driver's error
log.)
NC_ECONNREFUSED remote host not listening/refusing
NC_EMCONN too many pending connections (transient, try
again later)
NC_ENORESSOURCES insufficient system ressources (transient, try
again later)
If the driver is configured to support IPv6, <host> is first
interpreted as IPv6 hostname. If that fails, <host> is then
interpretd as IPv4 hostname.
If the connection can't be established immediately, the efun
returns 'success' and the driver will check in the background
for the progress of the connection. When it is established,
logon() will be called in the object. If the connection fails,
logon(-1) will be called in the object.
The efun raises a privilege violation ("net_connect", host, port).
BUGS
A non-blocking connect() doesn't imply a non-blocking
forward name resolution. If you provide a hostname instead
of an IP address to connect to, the driver will block until
the name is resolved. This may be an issue, depending on how
fast your nameserver replies. Non-blocking forward DNS
resolution can currently only be achieved using ERQ_LOOKUP.
HISTORY
First version 1992 by Snake and LynX for Nemesis.
Improved 1993 by Junky.
Added to LDMud 3.2.10.
SEE ALSO
logon(A)
|