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 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