Botan  2.6.0
Crypto and TLS for C++11
socket.h
Go to the documentation of this file.
1 /*
2 * OS specific utility functions
3 * (C) 2015,2016,2017 Jack Lloyd
4 *
5 * Botan is released under the Simplified BSD License (see license.txt)
6 */
7 
8 #ifndef BOTAN_SOCKET_H_
9 #define BOTAN_SOCKET_H_
10 
11 #include <botan/types.h>
12 #include <string>
13 #include <chrono>
14 
15 namespace Botan {
16 
17 namespace OS {
18 
19 /*
20 * This header is internal (not installed) and these functions are not
21 * intended to be called by applications. However they are given public
22 * visibility (using BOTAN_TEST_API macro) for the tests. This also probably
23 * allows them to be overridden by the application on ELF systems, but
24 * this hasn't been tested.
25 */
26 
27 
28 /**
29 * A wrapper around a simple blocking TCP socket
30 */
32  {
33  public:
34  /**
35  * The socket will be closed upon destruction
36  */
37  virtual ~Socket() = default;
38 
39  /**
40  * Write to the socket. Blocks until all bytes sent.
41  * Throws on error.
42  */
43  virtual void write(const uint8_t buf[], size_t len) = 0;
44 
45  /**
46  * Reads up to len bytes, returns bytes written to buf.
47  * Returns 0 on EOF. Throws on error.
48  */
49  virtual size_t read(uint8_t buf[], size_t len) = 0;
50  };
51 
52 /**
53 * Open up a socket. Will throw on error. Returns null if sockets are
54 * not available on this platform.
55 */
56 std::unique_ptr<Socket>
57 BOTAN_TEST_API open_socket(const std::string& hostname,
58  const std::string& service,
59  std::chrono::milliseconds timeout);
60 
61 } // OS
62 } // Botan
63 
64 #endif
std::unique_ptr< Socket > BOTAN_TEST_API open_socket(const std::string &hostname, const std::string &service, std::chrono::milliseconds timeout)
Definition: socket.cpp:352
#define BOTAN_TEST_API
Definition: compiler.h:41
Definition: alg_id.cpp:13