Main Page | Modules | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members | File Members | Related Pages

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 bool 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 
00131 class WvTCPListener : public WvFDStream
00132 {
00133 public:
00138     WvTCPListener(const WvIPPortAddr &_listenport);
00139 
00141     virtual ~WvTCPListener();
00142     
00144     virtual void close();
00145     
00152     WvTCPConn *accept();
00153     
00163     void auto_accept(WvIStreamList *list,
00164                      WvStreamCallback callfunc = NULL, void *userdata = NULL);
00165 
00175     void auto_accept(WvStreamCallback callfunc = NULL, void *userdata = NULL);
00176 
00181     virtual size_t uread(void *buf, size_t len);
00182     virtual size_t uwrite(const void *buf, size_t len);
00183     
00185     virtual const WvIPPortAddr *src() const;
00186     
00187 protected:
00188     WvIPPortAddr listenport;
00189     WvIStreamList *auto_list;
00190     WvStreamCallback auto_callback;
00191     void *auto_userdata;
00192     
00193     static void accept_callback(WvStream &s, void *userdata);
00194     static void accept_global_callback(WvStream &s, void *userdata);
00195 };
00196 
00197 
00198 #endif // __WVTCP_H

Generated on Tue Jul 12 02:59:28 2005 for WvStreams by  doxygen 1.4.0