wvtcp.h

00001 /* -*- Mode: C++ -*-
00002  * Worldvisions Weaver Software:
00003  *   Copyright (C) 1997-2002 Net Integration Technologies, Inc.
00004  *
00005  * WvStream-based TCP connection and server classes.
00006  */ 
00007 #ifndef __WVTCP_H
00008 #define __WVTCP_H
00009 
00010 #include "wvautoconf.h"
00011 #include <stdio.h>
00012 #if HAVE_SYS_TYPES_H
00013 # include <sys/types.h>
00014 #endif
00015 #if STDC_HEADERS
00016 # include <stdlib.h>
00017 # include <stddef.h>
00018 #else
00019 # if HAVE_STDLIB_H
00020 #  include <stdlib.h>
00021 # endif
00022 #endif
00023 #if HAVE_SYS_SOCKET_H
00024 # include <sys/socket.h>
00025 #endif
00026 
00027 #include "wvfdstream.h"
00028 #include "wvaddr.h"
00029 #include "wvresolver.h"
00030 
00031 
00032 class WvIStreamList;
00033 class WvTCPListener;
00034 
00040 class WvTCPConn : public WvFDStream
00041 {
00042     friend class WvTCPListener;
00043 protected:
00044     bool resolved, connected;
00045     WvString hostname;
00046     bool incoming;
00047     WvIPPortAddr remaddr;
00048     WvResolver dns;
00049     
00051     WvTCPConn(int _fd, const WvIPPortAddr &_remaddr);
00052     
00054     void do_connect();
00055     
00057     void check_resolver();
00058     
00059 public:
00065     WvTCPConn(const WvIPPortAddr &_remaddr);
00066     
00068     WvTCPConn(WvStringParm _hostname, uint16_t _port = 0);
00069 
00074     virtual ~WvTCPConn();
00075     
00080     void nice_tcpopts();
00081     
00086     void low_delay();
00087 
00092     void debug_mode();
00093 
00099     WvIPPortAddr localaddr();
00100     
00105     virtual const WvIPPortAddr *src() const;
00106 
00108     bool isconnected() const
00109         { return connected; }
00110     
00112     virtual void pre_select(SelectInfo &si);
00113     
00118     virtual bool post_select(SelectInfo &si);
00119     
00124     virtual bool isok() const;
00125 
00126 protected:
00127     virtual size_t uwrite(const void *buf, size_t count);
00128 
00129 public:
00130     const char *wstype() const { return "WvTCPConn"; }
00131 };
00132 
00134 class WvTCPListener : public WvFDStream
00135 {
00136 public:
00141     WvTCPListener(const WvIPPortAddr &_listenport);
00142 
00144     virtual ~WvTCPListener();
00145     
00147     virtual void close();
00148     
00155     WvTCPConn *accept();
00156     
00166     void auto_accept(WvIStreamList *list,
00167                      WvStreamCallback callfunc = NULL, void *userdata = NULL);
00168 
00178     void auto_accept(WvStreamCallback callfunc = NULL, void *userdata = NULL);
00179 
00184     virtual size_t uread(void *buf, size_t len);
00185     virtual size_t uwrite(const void *buf, size_t len);
00186     
00188     virtual const WvIPPortAddr *src() const;
00189     
00190 protected:
00191     WvIPPortAddr listenport;
00192     WvIStreamList *auto_list;
00193     WvStreamCallback auto_callback;
00194     void *auto_userdata;
00195     
00196     static void accept_callback(WvStream &s, void *userdata);
00197     static void accept_global_callback(WvStream &s, void *userdata);
00198 
00199 public:
00200     const char *wstype() const { return "WvTCPListener"; }
00201 };
00202 
00203 
00204 #endif // __WVTCP_H

Generated on Thu Jan 24 16:50:57 2008 for WvStreams by  doxygen 1.5.4