diff options
author | Jack Lloyd <[email protected]> | 2017-12-16 13:00:09 -0500 |
---|---|---|
committer | Jack Lloyd <[email protected]> | 2017-12-17 14:59:15 -0500 |
commit | 42ce76c89ce7858bb132a414284a27e6362f9558 (patch) | |
tree | 139cb02abce1b5dd5311b7b0a4225e45d883026b /src/lib/utils/socket/socket.h | |
parent | d358e9e12190c08c946c0f87dbedc55229ce11a6 (diff) |
Add timeouts to Asio sockets
Diffstat (limited to 'src/lib/utils/socket/socket.h')
-rw-r--r-- | src/lib/utils/socket/socket.h | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/src/lib/utils/socket/socket.h b/src/lib/utils/socket/socket.h new file mode 100644 index 000000000..42d723ec3 --- /dev/null +++ b/src/lib/utils/socket/socket.h @@ -0,0 +1,63 @@ +/* +* OS specific utility functions +* (C) 2015,2016,2017 Jack Lloyd +* +* Botan is released under the Simplified BSD License (see license.txt) +*/ + +#ifndef BOTAN_SOCKET_H_ +#define BOTAN_SOCKET_H_ + +#include <botan/types.h> +#include <chrono> + +namespace Botan { + +namespace OS { + +/* +* This header is internal (not installed) and these functions are not +* intended to be called by applications. However they are given public +* visibility (using BOTAN_TEST_API macro) for the tests. This also probably +* allows them to be overridden by the application on ELF systems, but +* this hasn't been tested. +*/ + + +/** +* A wrapper around a simple blocking TCP socket +*/ +class BOTAN_TEST_API Socket + { + public: + /** + * The socket will be closed upon destruction + */ + virtual ~Socket() = default; + + /** + * Write to the socket. Blocks until all bytes sent. + * Throws on error. + */ + virtual void write(const uint8_t buf[], size_t len) = 0; + + /** + * Reads up to len bytes, returns bytes written to buf. + * Returns 0 on EOF. Throws on error. + */ + virtual size_t read(uint8_t buf[], size_t len) = 0; + }; + +/** +* Open up a socket. Will throw on error. Returns null if sockets are +* not available on this platform. +*/ +std::unique_ptr<Socket> +BOTAN_TEST_API open_socket(const std::string& hostname, + const std::string& service, + std::chrono::milliseconds timeout); + +} // OS +} // Botan + +#endif |