Squashed 'third_party/ntcore_2016/' content from commit d8de5e4
Change-Id: Id4839f41b6a620d8bae58dcf1710016671cc4992
git-subtree-dir: third_party/ntcore_2016
git-subtree-split: d8de5e4f19e612e7102172c0dbf152ce82d3d63a
diff --git a/src/tcpsockets/TCPStream.h b/src/tcpsockets/TCPStream.h
new file mode 100644
index 0000000..21ef6fd
--- /dev/null
+++ b/src/tcpsockets/TCPStream.h
@@ -0,0 +1,67 @@
+/*
+ TCPStream.h
+
+ TCPStream class interface. TCPStream provides methods to trasnfer
+ data between peers over a TCP/IP connection.
+
+ ------------------------------------------
+
+ Copyright © 2013 [Vic Hargrave - http://vichargrave.com]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+#ifndef TCPSOCKETS_TCPSTREAM_H_
+#define TCPSOCKETS_TCPSTREAM_H_
+
+#include <cstddef>
+#include <string>
+
+#ifdef _WIN32
+#include <winsock2.h>
+#else
+#include <sys/socket.h>
+#endif
+
+#include "NetworkStream.h"
+
+class TCPStream : public NetworkStream {
+ int m_sd;
+ std::string m_peerIP;
+ int m_peerPort;
+
+ public:
+ friend class TCPAcceptor;
+ friend class TCPConnector;
+
+ ~TCPStream();
+
+ std::size_t send(const char* buffer, std::size_t len, Error* err) override;
+ std::size_t receive(char* buffer, std::size_t len, Error* err,
+ int timeout = 0) override;
+ void close() override;
+
+ llvm::StringRef getPeerIP() const override;
+ int getPeerPort() const override;
+ void setNoDelay() override;
+
+ TCPStream(const TCPStream& stream) = delete;
+ TCPStream& operator=(const TCPStream&) = delete;
+ private:
+ bool WaitForReadEvent(int timeout);
+
+ TCPStream(int sd, struct sockaddr_in* address);
+ TCPStream() = delete;
+};
+
+#endif