00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
#ifndef MN_TCPSOCKET_H
00025
#define MN_TCPSOCKET_H
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
#include "MNSocket.h"
00043
#include <sys/uio.h>
00044
#include <sys/socket.h>
00045
#include <netdb.h>
00046
#include <netinet/in.h>
00047
00048
class MNSelector;
00049
00050 class MNTCPSocket :
public MNSocket
00051 {
00052
public:
00053 enum CreationMode
00054 {
00055
MakeNow
00056 };
00057
00058 enum Fail
00059 {
00060
Ok = 0,
00061
Errno = -1,
00062
Herrno = -2
00063 };
00064
protected:
00065
void show_buffers (
struct iovec *iov );
00066
00067
private:
00069
MNTCPSocket&
operator=(
const MNTCPSocket& );
00071
MNTCPSocket(
const MNTCPSocket& );
00072
public:
00073
MNTCPSocket ( );
00074
MNTCPSocket (
int i );
00075
MNTCPSocket (
int i, CreationMode mode );
00076
00077
virtual ~MNTCPSocket ( );
00078
00079
void warn_errors (
int errval );
00080
00081
virtual void callback(
MNSelector* select,
int fd ) = 0;
00082 virtual void tcallback() { };
00083
00089 inline virtual bool isUdp()
const {
return false;}
00090
00096
virtual Fail
connect(
int port,
const char *hostname );
00097
00103
virtual Fail
connect(
const struct sockaddr_in& dest );
00104
00109
int read(
char* buffer,
int len );
00110
int write(
const char* buf,
int len );
00111
00126
bool getLocalSockAddr(
struct sockaddr_in& addr );
00127
00137
bool getRemoteSockAddr(
struct sockaddr_in& addr );
00138 };
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158 class MNTCPClientSocket :
public MNTCPSocket
00159 {
00160
public:
00161 MNTCPClientSocket( )
00162 { }
00163 MNTCPClientSocket(
int lsocket ) :
MNTCPSocket( lsocket )
00164 { }
00165
00166 virtual void callback (
MNSelector* ,
int )
00167 {
00168 MN_FATAL(
"callback() not implemented for MNTCPClientSocket");
00169 }
00170
00171
private:
00172
virtual int reader (
struct iovec* )
00173 {
00174 MN_FATAL(
"reader() not implemented for MNTCPClientSocket");
00175
return 0;
00176 }
00177
00178
virtual void set_buffers (
struct iovec* ,
int )
00179 {
00180 MN_FATAL(
"set_buffers() not implemented for MNTCPClientSocket");
00181 }
00182 };
00183
00184
#endif
00185