NetworkStream: Add setBlocking() and getNativeHandle(). (#161)

Also add checking for "would block" errors in send() and receive().

Check for set nonblocking failures in TCPConnector as well (generate warnings rather than errors)
This commit is contained in:
Peter Johnson
2016-11-27 19:59:52 -08:00
committed by GitHub
parent 00b76d42e0
commit 558b2ffa41
4 changed files with 74 additions and 10 deletions

View File

@@ -22,7 +22,8 @@ class NetworkStream {
enum Error {
kConnectionClosed = 0,
kConnectionReset = -1,
kConnectionTimedOut = -2
kConnectionTimedOut = -2,
kWouldBlock = -3
};
virtual std::size_t send(const char* buffer, std::size_t len, Error* err) = 0;
@@ -34,6 +35,10 @@ class NetworkStream {
virtual int getPeerPort() const = 0;
virtual void setNoDelay() = 0;
// returns false on failure
virtual bool setBlocking(bool enabled) = 0;
virtual int getNativeHandle() const = 0;
NetworkStream(const NetworkStream&) = delete;
NetworkStream& operator=(const NetworkStream&) = delete;
};

View File

@@ -43,6 +43,7 @@ class TCPStream : public NetworkStream {
int m_sd;
std::string m_peerIP;
int m_peerPort;
bool m_blocking;
public:
friend class TCPAcceptor;
@@ -58,6 +59,8 @@ class TCPStream : public NetworkStream {
llvm::StringRef getPeerIP() const override;
int getPeerPort() const override;
void setNoDelay() override;
bool setBlocking(bool enabled) override;
int getNativeHandle() const override;
TCPStream(const TCPStream& stream) = delete;
TCPStream& operator=(const TCPStream&) = delete;