X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/mLib/blobdiff_plain/32a3ab9914c04d2069dac2d01ecb28a6ac3b6d87..97f65b001294338abed02a7b132d6be6517b3f1d:/conn.h diff --git a/conn.h b/conn.h new file mode 100644 index 0000000..7362b65 --- /dev/null +++ b/conn.h @@ -0,0 +1,111 @@ +/* -*-c-*- + * + * $Id: conn.h,v 1.1 1999/05/14 21:01:14 mdw Exp $ + * + * Nonblocking connect handling + * + * (c) 1999 Mark Wooding + */ + +/*----- Licensing notice --------------------------------------------------* + * + * This file is part of the mLib utilities library. + * + * mLib is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * mLib is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with mLib; if not, write to the Free + * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, + * MA 02111-1307, USA. + */ + +/*----- Revision history --------------------------------------------------* + * + * $Log: conn.h,v $ + * Revision 1.1 1999/05/14 21:01:14 mdw + * Integrated `select' handling bits from the background resolver project. + * + */ + +#ifndef CONN_H +#define CONN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/*----- Header files ------------------------------------------------------*/ + +#ifndef SEL_H +# include "sel.h" +#endif + +/*----- Data structures ---------------------------------------------------*/ + +/* --- The nonblocking connect structure --- */ + +typedef struct conn { + sel_file writer; /* Select listener */ + void (*func)(int /*fd*/, void */*p*/); /* Handler function */ + void *p; /* Argument for handler function */ +} conn; + +/*----- Functions provided ------------------------------------------------*/ + +/* --- @conn_init@ --- * + * + * Arguments: @conn *c@ = pointer to connection block + * @sel_state *s@ = pointer to select state to attach to + * @unsigned long saddr@ = source IP address + * @unsigned short sport@ = source port + * @unsigned long daddr@ = destination IP address + * @unsigned short dport@ = destination port + * @void (*func)(int fd, void *p) = handler function + * @void *p@ = argument for the handler function + * + * Returns: --- + * + * Use: Sets up a nonblocking connect job. The source address and + * port can be zero if you don't care. When the connection + * completes, the handler function is called with the connected + * socket as an argument. If the connect fails rather than + * completes, the handler is informed of this by being passed a + * negative file descriptor. In either case, the select job is + * then removed. + */ + +extern void conn_init(conn */*c*/, sel_state */*s*/, + unsigned long /*saddr*/, + unsigned short /*sport*/, + unsigned long /*daddr*/, + unsigned long /*dport*/, + void (*/*func*/)(int /*fd*/, void */*p*/), + void */*p*/); + +/* --- @conn_kill@ --- * + * + * Arguments: @conn *c@ = pointer to connection to dispose of + * + * Returns: --- + * + * Use: Disposes of a connection when it's not wanted any more. The + * connect handler function is not called. + */ + +extern void conn_kill(conn */*c*/); + +/*----- That's all, folks -------------------------------------------------*/ + +#ifdef __cplusplus + } +#endif + +#endif