00001 /* 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 "wvstream.h" 00011 #include "wvaddr.h" 00012 #include "wvresolver.h" 00013 00014 #ifdef ISBSD 00015 #include <netinet/in_systm.h> 00016 #define SOL_TCP 6 00017 #define SOL_IP 4 00018 #endif 00019 00020 class WvStreamList; 00021 class WvTCPListener; 00022 00028 class WvTCPConn : public WvStream 00029 { 00030 friend class WvTCPListener; 00031 protected: 00032 bool resolved, connected; 00033 WvString hostname; 00034 WvIPPortAddr remaddr; 00035 WvResolver dns; 00036 00040 WvTCPConn(int _fd, const WvIPPortAddr &_remaddr); 00041 00045 void do_connect(); 00046 00050 void check_resolver(); 00051 00052 public: 00058 WvTCPConn(const WvIPPortAddr &_remaddr); 00059 00063 WvTCPConn(const WvString &_hostname, __u16 _port = 0); 00064 00069 virtual ~WvTCPConn(); 00070 00075 void nice_tcpopts(); 00076 00081 void low_delay(); 00082 00088 WvIPPortAddr localaddr(); 00089 00094 virtual const WvIPPortAddr *src() const; 00095 00099 bool isconnected() const 00100 { return connected; } 00101 00105 virtual bool pre_select(SelectInfo &si); 00106 00111 virtual bool post_select(SelectInfo &si); 00112 00117 virtual bool isok() const; 00118 }; 00119 00123 class WvTCPListener : public WvStream 00124 { 00125 public: 00130 WvTCPListener(const WvIPPortAddr &_listenport); 00131 00135 virtual ~WvTCPListener(); 00136 00140 virtual void close(); 00141 00148 WvTCPConn *accept(); 00149 00159 void auto_accept(WvStreamList *list, 00160 WvStreamCallback callfunc = NULL, void *userdata = NULL); 00161 00166 virtual size_t uread(void *buf, size_t len); 00167 virtual size_t uwrite(const void *buf, size_t len); 00168 00172 virtual const WvIPPortAddr *src() const; 00173 00174 protected: 00175 WvIPPortAddr listenport; 00176 WvStreamList *auto_list; 00177 WvStreamCallback auto_callback; 00178 void *auto_userdata; 00179 00180 static void accept_callback(WvStream &s, void *userdata); 00181 }; 00182 00183 00184 #endif // __WVTCP_H