WvStreams
|
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 WvTCPListener; 00033 00039 class WvTCPConn : public WvFDStream 00040 { 00041 friend class WvTCPListener; 00042 protected: 00043 bool resolved, connected; 00044 WvString hostname; 00045 bool incoming; 00046 WvIPPortAddr remaddr; 00047 WvResolver dns; 00048 00050 WvTCPConn(int _fd, const WvIPPortAddr &_remaddr); 00051 00053 void do_connect(); 00054 00056 void check_resolver(); 00057 00058 public: 00064 WvTCPConn(const WvIPPortAddr &_remaddr); 00065 00067 WvTCPConn(WvStringParm _hostname, uint16_t _port = 0); 00068 00073 virtual ~WvTCPConn(); 00074 00079 void nice_tcpopts(); 00080 00085 void low_delay(); 00086 00091 void debug_mode(); 00092 00098 WvIPPortAddr localaddr(); 00099 00104 virtual const WvIPPortAddr *src() const; 00105 00107 bool isconnected() const 00108 { return connected; } 00109 00111 virtual void pre_select(SelectInfo &si); 00112 00117 virtual bool post_select(SelectInfo &si); 00118 00123 virtual bool isok() const; 00124 00125 protected: 00126 virtual size_t uwrite(const void *buf, size_t count); 00127 00128 public: 00129 const char *wstype() const { return "WvTCPConn"; } 00130 }; 00131 00132 00133 #endif // __WVTCP_H