summaryrefslogtreecommitdiffstats
path: root/vespalib
diff options
context:
space:
mode:
authorHåvard Pettersen <havardpe@oath.com>2018-09-17 09:48:13 +0000
committerHåvard Pettersen <havardpe@oath.com>2018-09-17 09:48:13 +0000
commit9e565ca6db40ce80210222e0bbfb3cb900abf7f1 (patch)
tree496a55ae87893fba40547714dadaa023e9193535 /vespalib
parentcbfa37a64fd7d5fa39783682c09bb4247c6ad2a2 (diff)
drain as much as possible before reading more socket data
Diffstat (limited to 'vespalib')
-rw-r--r--vespalib/src/vespa/vespalib/net/crypto_engine.cpp2
-rw-r--r--vespalib/src/vespa/vespalib/net/tls/crypto_codec_adapter.cpp6
2 files changed, 6 insertions, 2 deletions
diff --git a/vespalib/src/vespa/vespalib/net/crypto_engine.cpp b/vespalib/src/vespa/vespalib/net/crypto_engine.cpp
index ec225311b60..254a9b213ba 100644
--- a/vespalib/src/vespa/vespalib/net/crypto_engine.cpp
+++ b/vespalib/src/vespa/vespalib/net/crypto_engine.cpp
@@ -112,7 +112,7 @@ public:
}
size_t min_read_buffer_size() const override { return 1; }
ssize_t read(char *buf, size_t len) override {
- if (_input.obtain().size < CHUNK_SIZE) {
+ if (_input.obtain().size == 0) {
auto dst = _input.reserve(CHUNK_SIZE);
ssize_t res = _socket.read(dst.data, dst.size);
if (res > 0) {
diff --git a/vespalib/src/vespa/vespalib/net/tls/crypto_codec_adapter.cpp b/vespalib/src/vespa/vespalib/net/tls/crypto_codec_adapter.cpp
index f8fa4ab2b53..494919f449f 100644
--- a/vespalib/src/vespa/vespalib/net/tls/crypto_codec_adapter.cpp
+++ b/vespalib/src/vespa/vespalib/net/tls/crypto_codec_adapter.cpp
@@ -85,11 +85,15 @@ CryptoCodecAdapter::handshake()
ssize_t
CryptoCodecAdapter::read(char *buf, size_t len)
{
+ auto drain_res = drain(buf, len);
+ if (drain_res != 0) {
+ return drain_res;
+ }
auto fill_res = fill_input();
if (fill_res <= 0) {
return fill_res;
}
- auto drain_res = drain(buf, len);
+ drain_res = drain(buf, len);
if (drain_res != 0) {
return drain_res;
}