00001 #ifndef _sys_Socket_h
00002 #define _sys_Socket_h
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include <string>
00026 #include <sys/Time.h>
00027
00028 #ifdef USE_APR
00029 # include <apr_network_io.h>
00030 #endif
00031
00032 namespace qpid {
00033 namespace sys {
00034
00035 class Socket
00036 {
00037 public:
00039 static Socket createTcp();
00040
00042 #ifdef USE_APR
00043 Socket(apr_socket_t* descriptor = 0);
00044 #else
00045 Socket(int descriptor = 0);
00046 #endif
00047
00049 void setTimeout(Time interval);
00050 void setTcpNoDelay(bool on);
00051
00052 void connect(const std::string& host, int port);
00053
00054 void close();
00055
00056 enum { SOCKET_TIMEOUT=-2, SOCKET_EOF=-3 } ErrorCode;
00057
00059 ssize_t send(const void* data, size_t size);
00060
00065 ssize_t recv(void* data, size_t size);
00066
00072 int listen(int port = 0, int backlog = 10);
00073
00075 int fd();
00076
00077 private:
00078 #ifdef USE_APR
00079 apr_socket_t* socket;
00080 #else
00081 void init() const;
00082 mutable int socket;
00083 #endif
00084 };
00085
00086 }}
00087
00088
00089 #endif