raw_socket.h
Go to the documentation of this file.00001 #ifndef RAW_SOCKET_CLASS
00002 #define RAW_SOCKET_CLASS
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00019
00029 #include <basis/array.h>
00030 #include <basis/astring.h>
00031 #include <basis/contracts.h>
00032
00033 namespace sockets {
00034
00035
00036 class fd_set_wrapper;
00037 class tcpip_stack;
00038
00040
00041
00042 enum socket_interests {
00043 SI_READABLE = 0x1,
00044 SI_WRITABLE = 0x2,
00045 SI_CONNECTED = 0x4,
00046 SI_DISCONNECTED = 0x8,
00047 SI_ERRONEOUS = 0x10,
00048 SI_BASELINE = 0x20,
00049
00050 SI_ALL_SOCK_INT = 0xFF
00051 };
00052
00054
00055 class raw_socket : public virtual basis::root_object
00056 {
00057 public:
00058 raw_socket();
00059
00060 ~raw_socket();
00061
00062 DEFINE_CLASS_NAME("raw_socket");
00063
00064
00065
00066
00067 int close(basis::un_int &socket);
00068
00069
00070 int ioctl(basis::un_int socket, int request, void *argp) const;
00071
00072
00073 bool set_non_blocking(basis::un_int socket, bool non_blocking = true);
00074
00075
00076
00077 bool set_nagle_algorithm(basis::un_int socket, bool use_nagle = true);
00078
00079
00080
00081
00082 bool set_broadcast(basis::un_int socket, bool broadcasting = true);
00083
00084
00085
00086 bool set_reuse_address(basis::un_int socket, bool reuse = true);
00087
00088
00089
00090 bool set_keep_alive(basis::un_int socket, bool keep_alive = true);
00091
00092
00093
00094 static basis::astring interest_name(int to_name);
00095
00096
00097
00098 enum select_types {
00099 SELECTING_JUST_WRITE = 0x1,
00100 SELECTING_JUST_READ = 0x2
00101 };
00102
00103 int select(basis::un_int socket, int selection_mode, int timeout = 0) const;
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117 int select(basis::int_array &read_sox, basis::int_array &write_sox, int timeout = 0) const;
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128 int analyze_select_result(basis::un_int socket, int mode, fd_set_wrapper &read_list,
00129 fd_set_wrapper &write_list, fd_set_wrapper &exceptions) const;
00130
00131
00132
00133 private:
00134 tcpip_stack *_stack;
00135
00136 int test_readability(basis::un_int socket) const;
00137
00138
00139
00140
00141 int inner_select(basis::un_int socket, int selection_mode, int timeout,
00142 fd_set_wrapper &read_list, fd_set_wrapper &write_list,
00143 fd_set_wrapper &exceptions) const;
00144
00145
00146
00147
00148
00149
00150 };
00151
00153
00154 #ifdef __UNIX__
00155
00156 #define INVALID_SOCKET -1
00157 #define SOCKET_ERROR -1
00158 typedef void sock_hop;
00159
00160
00161
00162
00163 #define SOCK_EACCES EACCES
00164 #define SOCK_EADDRINUSE EADDRINUSE
00165 #define SOCK_EADDRNOTAVAIL EADDRNOTAVAIL
00166 #define SOCK_EAFNOSUPPORT EAFNOSUPPORT
00167 #define SOCK_EALREADY EALREADY
00168 #define SOCK_EBADF EBADF
00169 #define SOCK_ECONNABORTED ECONNABORTED
00170 #define SOCK_ECONNREFUSED ECONNREFUSED
00171 #define SOCK_ECONNRESET ECONNRESET
00172 #define SOCK_EDESTADDRREQ EDESTADDRREQ
00173 #define SOCK_EDQUOT EDQUOT
00174 #define SOCK_EFAULT EFAULT
00175 #define SOCK_EHOSTDOWN EHOSTDOWN
00176 #define SOCK_EHOSTUNREACH EHOSTUNREACH
00177 #define SOCK_EINPROGRESS EINPROGRESS
00178 #define SOCK_EINTR EINTR
00179 #define SOCK_EINVAL EINVAL
00180 #define SOCK_EISCONN EISCONN
00181 #define SOCK_ELOOP ELOOP
00182 #define SOCK_EMFILE EMFILE
00183 #define SOCK_EMSGSIZE EMSGSIZE
00184 #define SOCK_ENAMETOOLONG ENAMETOOLONG
00185 #define SOCK_ENETDOWN ENETDOWN
00186 #define SOCK_ENETUNREACH ENETUNREACH
00187 #define SOCK_ENETRESET ENETRESET
00188 #define SOCK_ENOBUFS ENOBUFS
00189 #define SOCK_ENOPROTOOPT ENOPROTOOPT
00190 #define SOCK_ENOTCONN ENOTCONN
00191 #define SOCK_ENOTEMPTY ENOTEMPTY
00192 #define SOCK_ENOTSOCK ENOTSOCK
00193 #define SOCK_EOPNOTSUPP EOPNOTSUPP
00194 #define SOCK_EPFNOSUPPORT EPFNOSUPPORT
00195 #define SOCK_EPROCLIM EPROCLIM
00196 #define SOCK_EPROTOTYPE EPROTOTYPE
00197 #define SOCK_EPROTONOSUPPORT EPROTONOSUPPORT
00198 #define SOCK_EREMOTE EREMOTE
00199 #define SOCK_ESHUTDOWN ESHUTDOWN
00200 #define SOCK_ESOCKTNOSUPPORT ESOCKTNOSUPPORT
00201 #define SOCK_ESTALE ESTALE
00202 #define SOCK_ETIMEDOUT ETIMEDOUT
00203 #define SOCK_ETOOMANYREFS ETOOMANYREFS
00204 #define SOCK_EWOULDBLOCK EWOULDBLOCK
00205 #define SOCK_EUSERS EUSERS
00206 #endif //unix.
00207
00209
00210 #ifdef __WIN32__
00211 typedef char sock_hop;
00212 typedef int socklen_t;
00213
00214
00215 #define SOCK_EACCES WSAEACCES
00216 #define SOCK_EADDRINUSE WSAEADDRINUSE
00217 #define SOCK_EADDRNOTAVAIL WSAEADDRNOTAVAIL
00218 #define SOCK_EAFNOSUPPORT WSAEAFNOSUPPORT
00219 #define SOCK_EALREADY WSAEALREADY
00220 #define SOCK_EBADF WSAEBADF
00221 #define SOCK_ECONNABORTED WSAECONNABORTED
00222 #define SOCK_ECONNREFUSED WSAECONNREFUSED
00223 #define SOCK_ECONNRESET WSAECONNRESET
00224 #define SOCK_EDESTADDRREQ WSAEDESTADDRREQ
00225 #define SOCK_EDQUOT WSAEDQUOT
00226 #define SOCK_EFAULT WSAEFAULT
00227 #define SOCK_EHOSTDOWN WSAEHOSTDOWN
00228 #define SOCK_EHOSTUNREACH WSAEHOSTUNREACH
00229 #define SOCK_EINPROGRESS WSAEINPROGRESS
00230 #define SOCK_EINTR WSAEINTR
00231 #define SOCK_EINVAL WSAEINVAL
00232 #define SOCK_EISCONN WSAEISCONN
00233 #define SOCK_ELOOP WSAELOOP
00234 #define SOCK_EMFILE WSAEMFILE
00235 #define SOCK_EMSGSIZE WSAEMSGSIZE
00236 #define SOCK_ENAMETOOLONG WSAENAMETOOLONG
00237 #define SOCK_ENETDOWN WSAENETDOWN
00238 #define SOCK_ENETUNREACH WSAENETUNREACH
00239 #define SOCK_ENETRESET WSAENETRESET
00240 #define SOCK_ENOBUFS WSAENOBUFS
00241 #define SOCK_ENOPROTOOPT WSAENOPROTOOPT
00242 #define SOCK_ENOTCONN WSAENOTCONN
00243 #define SOCK_ENOTEMPTY WSAENOTEMPTY
00244 #define SOCK_ENOTSOCK WSAENOTSOCK
00245 #define SOCK_EOPNOTSUPP WSAEOPNOTSUPP
00246 #define SOCK_EPFNOSUPPORT WSAEPFNOSUPPORT
00247 #define SOCK_EPROCLIM WSAEPROCLIM
00248 #define SOCK_EPROTOTYPE WSAEPROTOTYPE
00249 #define SOCK_EPROTONOSUPPORT WSAEPROTONOSUPPORT
00250 #define SOCK_EREMOTE WSAEREMOTE
00251 #define SOCK_ESHUTDOWN WSAESHUTDOWN
00252 #define SOCK_ESOCKTNOSUPPORT WSAESOCKTNOSUPPORT
00253 #define SOCK_ESTALE WSAESTALE
00254 #define SOCK_ETIMEDOUT WSAETIMEDOUT
00255 #define SOCK_ETOOMANYREFS WSAETOOMANYREFS
00256 #define SOCK_EUSERS WSAEUSERS
00257
00258
00259 #define SOCK_EWOULDBLOCK WSAEWOULDBLOCK
00260 #define SOCK_HOST_NOT_FOUND WSAHOST_NOT_FOUND
00261 #define SOCK_NO_DATA WSANO_DATA
00262 #define SOCK_NO_RECOVERY WSANO_RECOVERY
00263 #define SOCK_NOTINITIALISED WSANOTINITIALISED
00264 #define SOCK_SYSNOTREADY WSASYSNOTREADY
00265 #define SOCK_TRY_AGAIN WSATRY_AGAIN
00266 #define SOCK_VERNOTSUPPORTED WSAVERNOTSUPPORTED
00267 #endif //win32.
00268
00270
00271 }
00272
00273 #endif // outer guard.
00274