home *** CD-ROM | disk | FTP | other *** search
/ Hackers Magazine 57 / CdHackersMagazineNr57.iso / Software / Multimedia / k3d-setup-0.7.11.0.exe / include / k3d / k3dsdk / socket.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-01-23  |  3.1 KB  |  112 lines

  1. #ifndef K3DSDK_SOCKET_H
  2. #define K3DSDK_SOCKET_H
  3.  
  4. // K-3D
  5. // Copyright (c) 1995-2005, Timothy M. Shead
  6. //
  7. // Contact: tshead@k-3d.com
  8. //
  9. // This program is free software; you can redistribute it and/or
  10. // modify it under the terms of the GNU General Public
  11. // License as published by the Free Software Foundation; either
  12. // version 2 of the License, or (at your option) any later version.
  13. //
  14. // This program is distributed in the hope that it will be useful,
  15. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  17. // General Public License for more details.
  18. //
  19. // You should have received a copy of the GNU General Public
  20. // License along with this program; if not, write to the Free Software
  21. // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  22.  
  23. /** \file
  24.         \author Tim Shead (tshead@k-3d.com)
  25. */
  26.  
  27. #include <boost/cstdint.hpp>
  28. #include <stdexcept>
  29.  
  30. namespace k3d
  31. {
  32.  
  33. namespace socket
  34. {
  35.  
  36. /// Defines storage for a host address (hostname or IP address in dotted-quad notation)
  37. typedef std::string address;
  38. /// Defines storage for a TCP port number
  39. typedef boost::uint16_t port;
  40.  
  41. /// Base-class for all exceptions thrown by sockets
  42. class exception :
  43.     public std::runtime_error
  44. {
  45. public:
  46.     exception(const std::string& message);
  47. };
  48.  
  49. /// Exception thrown when the opposite end of a connection has closed
  50. class closed :
  51.     public exception
  52. {
  53. public:
  54.     closed();
  55. };
  56.  
  57. /// Exception thrown when a non-blocking socket operation would block
  58. class would_block :
  59.     public exception
  60. {
  61. public:
  62.     would_block();
  63. };
  64.  
  65. /// Encapsulates one end of an open socket connection
  66. class endpoint
  67. {
  68. public:
  69.     ~endpoint();
  70.  
  71.     /// Sets blocking behavior for the endpoint (endpoints are blocking by default)
  72.     void set_blocking();
  73.     /// Sets non-blocking behavior for the endpoint (non-blocking endpoints throw a would_block exception if an operation would block)
  74.     void set_non_blocking();
  75.  
  76.     /// Accepts an incoming connection, returning an endpoint for communicating with the remote host (server sockets only)
  77.     /** \note The new connection will be blocking, regardless of the state of the listening socket */
  78.     endpoint accept();
  79.  
  80.     /// Writes a buffer of given length to the socket
  81.     void write(const char* Buffer, const size_t Length);
  82.     /// Writes a string to the socket
  83.     void write(const std::string& Buffer);
  84.     
  85.     /// Reads up to Length bytes from the socket into the given buffer, returns the number of bytes read
  86.     size_t read(char* Buffer, const size_t Length);
  87.     /// Reads up to Length bytes from the socket into a string, resizing the string to reflect the number of bytes read
  88.     void read(std::string& Buffer, const size_t Length = 4096);
  89.  
  90. private:
  91.     class implementation;
  92.     implementation* const m_implementation;
  93.  
  94.     endpoint(implementation* const);
  95.  
  96.     friend endpoint listen(const port&);
  97.     friend endpoint connect(const address&, const port&);
  98. };
  99.  
  100. /// Creates a listening socket, bound to a local port (a server), throws on failure
  101. endpoint listen(const port& Port);
  102. /// Connects to a listening server, throws on failure
  103. endpoint connect(const address& Host, const port& Port);
  104.  
  105. } // namespace socket
  106.  
  107. } // namespace k3d
  108.  
  109. #endif // !K3DSDK_SOCKET_H
  110.  
  111.  
  112.