aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/utils/socket/socket.h
diff options
context:
space:
mode:
authorJack Lloyd <[email protected]>2017-12-16 13:00:09 -0500
committerJack Lloyd <[email protected]>2017-12-17 14:59:15 -0500
commit42ce76c89ce7858bb132a414284a27e6362f9558 (patch)
tree139cb02abce1b5dd5311b7b0a4225e45d883026b /src/lib/utils/socket/socket.h
parentd358e9e12190c08c946c0f87dbedc55229ce11a6 (diff)
Add timeouts to Asio sockets
Diffstat (limited to 'src/lib/utils/socket/socket.h')
-rw-r--r--src/lib/utils/socket/socket.h63
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