Import buf from Catacomb; split out the dstr bits, and throw away the mp and
[mLib] / man / conn.3
index f9dd0d2..02261b7 100644 (file)
@@ -1,5 +1,6 @@
 .\" -*-nroff-*-
 .TH conn 3 "23 May 1999" "Straylight/Edgeware" "mLib utilities library"
+.\" @conn_fd
 .\" @conn_init
 .\" @conn_kill
 .SH NAME
@@ -8,10 +9,14 @@ conn \- selector for nonblocking connections
 .nf
 .B "#include <mLib/conn.h>"
 
-.BI "void conn_init(conn *" c ", sel_state *" s ", int " fd ,
-.BI "               struct sockaddr *" dst ", int " dsz ,
-.BI "               void (*" func ")(int " fd ", void *" p ),
-.BI "               void *" p );
+.BI "int conn_fd(conn *" c ", sel_state *" s ", int " fd ,
+.BI "            void (*" func ")(int " fd ", void *" p ),
+.BI "            void *" p );
+
+.BI "int conn_init(conn *" c ", sel_state *" s ", int " fd ,
+.BI "              struct sockaddr *" dst ", int " dsz ,
+.BI "              void (*" func ")(int " fd ", void *" p ),
+.BI "              void *" p );
 
 .BI "void conn_kill(conn *" c );
 .fi
@@ -61,15 +66,51 @@ to
 .B conn_init
 as the
 .I p
-argument.  If the connection failed, a file descriptor value of \-1 is
-passed, and the global
-.B errno
-value is set appropriately.
+argument.
 .TP
 .BI "void *" p
 An arbitrary pointer whose value is passed to the handler function when
 the connection finishes.
 .PP
+A few words are in order about
+.BR conn_init 's
+detailed behaviour and return value.  If it returns \-1, the connection
+attempt has failed immediately, an error code is stored in the global
+variable
+.BR errno ,
+the file descriptor has been
+.IR closed ,
+and the connection function will
+.I not
+be called.  If it returns zero, then there has been no immediate
+failure; the connection function
+.I might
+have been called, if the connection succeeded immediately, but it will
+certainly be called some time, unless the connector is killed (see
+.B conn_kill
+below).  When the connection function is called, it will either be
+passed the file descriptor of the new-connected socket (to indicate
+success) or the value \-1 for failure; in the latter case, an
+appropriate error code is stored in
+.BR errno .
+.PP
+Alternatively, if you have a socket with a pending connection (i.e., a
+call to
+.BR connect
+returned \-1 and set 
+.B errno
+to
+.BR EINPROGRESS ), 
+you can call
+.BR conn_fd.
+Its arguments are the same as for
+.BR conn_init ,
+except that since the socket knows its a peer address the
+.I dst
+and
+.I dsz
+arguments are not given, and it can't fail.
+.PP
 If you want to cancel the connection attempt before it finishes, call
 .B conn_kill
 with the address of the selector.  The file descriptor is closed, and
@@ -79,4 +120,4 @@ the selector becomes safe to be discarded.
 .BR sel (3),
 .BR mLib (3).
 .SH AUTHOR
-Mark Wooding, <mdw@nsict.org>
+Mark Wooding, <mdw@distorted.org.uk>