00001
00002
00003
00004
00005
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