libiqxmlrpc  0.12.4
 All Classes Namespaces Files Functions Typedefs Enumerations
socket.h
1 // Libiqxmlrpc - an object-oriented XML-RPC solution.
2 // Copyright (C) 2011 Anton Dedov
3 
4 #ifndef _libiqnet_socket_h_
5 #define _libiqnet_socket_h_
6 
7 #include "inet_addr.h"
8 
9 namespace iqnet
10 {
11 
13 class LIBIQXMLRPC_API Socket {
14 public:
15 #ifdef _WINDOWS
16  typedef SOCKET Handler;
17 #else
18  typedef int Handler;
19 #endif //_WINDOWS
20 
21 private:
22  Handler sock;
23  Inet_addr peer;
24 
25 public:
27  Socket();
29  Socket( Handler, const Inet_addr& );
31  virtual ~Socket() {}
32 
33  Handler get_handler() const { return sock; }
34 
35  void shutdown();
36  void close();
37 
39  void set_non_blocking( bool );
40 
42  virtual size_t send( const char*, size_t );
43  virtual void send_shutdown( const char*, size_t );
45  virtual size_t recv( char*, size_t );
46 
47  void bind( const Inet_addr& addr );
48  void listen( unsigned backlog = 5 );
49  Socket accept();
50  bool connect( const iqnet::Inet_addr& );
51 
53  Inet_addr get_addr() const;
54 
56  const Inet_addr& get_peer_addr() const { return peer; }
57 
59  int get_last_error();
60 };
61 
62 } // namespace iqnet
63 
64 #endif