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 "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
00051 void connect(const std::string& host, int port);
00052
00053 void close();
00054
00055 enum { SOCKET_TIMEOUT=-2, SOCKET_EOF=-3 } ErrorCode;
00056
00058 ssize_t send(const void* data, size_t size);
00059
00064 ssize_t recv(void* data, size_t size);
00065
00071 int listen(int port = 0, int backlog = 10);
00072
00074 int fd();
00075
00076 private:
00077 #ifdef USE_APR
00078 apr_socket_t* socket;
00079 #else
00080 void init() const;
00081 mutable int socket;
00082 #endif
00083 };
00084
00085 }}
00086
00087
00088 #endif