diff options
author | Haavard <havardpe@yahoo-inc.com> | 2017-04-21 14:33:12 +0000 |
---|---|---|
committer | Haavard <havardpe@yahoo-inc.com> | 2017-04-21 21:04:33 +0000 |
commit | bbf11af22fff91b6f8f757a252ee4255bd018166 (patch) | |
tree | 7f8306230bfc0d37a7baa91589705c0cdd571a0c /vbench | |
parent | 33390132c1249768e445d8272bbfe421c6d2a5fc (diff) |
let socket handle handle more socket stuff
very simple Socket/SimpleSocket
stop using fastos sockets in websocket experimental code
stop using fastos sockets in vbench
Diffstat (limited to 'vbench')
-rw-r--r-- | vbench/CMakeLists.txt | 1 | ||||
-rw-r--r-- | vbench/src/tests/server_socket/.gitignore | 1 | ||||
-rw-r--r-- | vbench/src/tests/server_socket/CMakeLists.txt | 9 | ||||
-rw-r--r-- | vbench/src/tests/server_socket/FILES | 1 | ||||
-rw-r--r-- | vbench/src/tests/server_socket/server_socket_test.cpp | 24 | ||||
-rw-r--r-- | vbench/src/vbench/core/socket.cpp | 33 | ||||
-rw-r--r-- | vbench/src/vbench/core/socket.h | 34 | ||||
-rw-r--r-- | vbench/src/vbench/test/CMakeLists.txt | 1 | ||||
-rw-r--r-- | vbench/src/vbench/test/all.h | 1 | ||||
-rw-r--r-- | vbench/src/vbench/test/server_socket.cpp | 39 | ||||
-rw-r--r-- | vbench/src/vbench/test/server_socket.h | 28 |
11 files changed, 41 insertions, 131 deletions
diff --git a/vbench/CMakeLists.txt b/vbench/CMakeLists.txt index 493505fc91c..1a5f2860bce 100644 --- a/vbench/CMakeLists.txt +++ b/vbench/CMakeLists.txt @@ -35,7 +35,6 @@ vespa_define_module( src/tests/request_dumper src/tests/request_generator src/tests/request_sink - src/tests/server_socket src/tests/server_spec src/tests/server_tagger src/tests/socket diff --git a/vbench/src/tests/server_socket/.gitignore b/vbench/src/tests/server_socket/.gitignore deleted file mode 100644 index e79511c3a0a..00000000000 --- a/vbench/src/tests/server_socket/.gitignore +++ /dev/null @@ -1 +0,0 @@ -vbench_server_socket_test_app diff --git a/vbench/src/tests/server_socket/CMakeLists.txt b/vbench/src/tests/server_socket/CMakeLists.txt deleted file mode 100644 index ac76763ae16..00000000000 --- a/vbench/src/tests/server_socket/CMakeLists.txt +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -vespa_add_executable(vbench_server_socket_test_app TEST - SOURCES - server_socket_test.cpp - DEPENDS - vbench_test - vbench -) -vespa_add_test(NAME vbench_server_socket_test_app COMMAND vbench_server_socket_test_app) diff --git a/vbench/src/tests/server_socket/FILES b/vbench/src/tests/server_socket/FILES deleted file mode 100644 index 47bee2d3769..00000000000 --- a/vbench/src/tests/server_socket/FILES +++ /dev/null @@ -1 +0,0 @@ -server_socket_test.cpp diff --git a/vbench/src/tests/server_socket/server_socket_test.cpp b/vbench/src/tests/server_socket/server_socket_test.cpp deleted file mode 100644 index 575c7dfaa02..00000000000 --- a/vbench/src/tests/server_socket/server_socket_test.cpp +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -#include <vespa/vespalib/testkit/testapp.h> -#include <vbench/test/all.h> -#include <vespa/vespalib/util/thread.h> - -using namespace vbench; - -TEST_MT_F("require that close will interrupt accept", 2, ServerSocket()) { - if (thread_id == 0) { - for (;;) { - Stream::UP stream = f1.accept(); - if (stream.get() == 0) { - break; - } - } - Stream::UP s2 = f1.accept(); - EXPECT_TRUE(s2.get() == 0); - } else { - vespalib::Thread::sleep(20); - f1.close(); - } -} - -TEST_MAIN() { TEST_RUN_ALL(); } diff --git a/vbench/src/vbench/core/socket.cpp b/vbench/src/vbench/core/socket.cpp index 84975adf4ae..7306d25cf32 100644 --- a/vbench/src/vbench/core/socket.cpp +++ b/vbench/src/vbench/core/socket.cpp @@ -2,12 +2,22 @@ #include <vespa/fastos/fastos.h> #include "socket.h" +#include <vespa/vespalib/net/socket_options.h> +#include <vespa/vespalib/net/socket_spec.h> namespace vbench { +namespace { + +vespalib::SocketHandle connect(const string &host, int port) { + return vespalib::SocketSpec::from_host_port(host, port).client_address().connect(); +} + +} // namespace vbench::<unnamed> + constexpr size_t READ_SIZE = 32768; -Socket::Socket(std::unique_ptr<FastOS_SocketInterface> socket) +Socket::Socket(vespalib::SocketHandle socket) : _socket(std::move(socket)), _input(), _output(), @@ -16,35 +26,26 @@ Socket::Socket(std::unique_ptr<FastOS_SocketInterface> socket) { } -Socket::Socket(const string host, int port) - : _socket(new FastOS_Socket()), +Socket::Socket(const string &host, int port) + : _socket(connect(host, port)), _input(), _output(), _taint(), _eof(false) { - if (!_socket->SetAddressByHostName(port, host.c_str()) || - !_socket->SetSoBlocking(true) || - !_socket->Connect() || - !_socket->SetSoLinger(false, 0)) - { - _socket->Close(); + if (!_socket.valid() || !_socket.set_linger(false, 0)) { _taint.reset(strfmt("socket connect failed: host: %s, port: %d", host.c_str(), port)); + _socket.reset(); } } -Socket::~Socket() -{ - _socket->Close(); -} - Memory Socket::obtain() { if ((_input.get().size == 0) && !_eof && !_taint) { WritableMemory buf = _input.reserve(READ_SIZE); - ssize_t res = _socket->Read(buf.data, buf.size); + ssize_t res = _socket.read(buf.data, buf.size); if (res > 0) { _input.commit(res); } else if (res < 0) { @@ -75,7 +76,7 @@ Socket::commit(size_t bytes) _output.commit(bytes); while ((_output.get().size > 0) && !_taint) { Memory buf = _output.obtain(); - ssize_t res = _socket->Write(buf.data, buf.size); + ssize_t res = _socket.write(buf.data, buf.size); if (res > 0) { _output.evict(res); } else { diff --git a/vbench/src/vbench/core/socket.h b/vbench/src/vbench/core/socket.h index 092a28952f4..e961994c37a 100644 --- a/vbench/src/vbench/core/socket.h +++ b/vbench/src/vbench/core/socket.h @@ -5,10 +5,10 @@ #include "string.h" #include "stream.h" #include <vespa/vespalib/data/simple_buffer.h> +#include <vespa/vespalib/net/socket_handle.h> +#include <vespa/vespalib/net/server_socket.h> #include <memory> -class FastOS_SocketInterface; - namespace vbench { using Input = vespalib::Input; @@ -20,16 +20,15 @@ using WritableMemory = vespalib::WritableMemory; class Socket : public Stream { private: - std::unique_ptr<FastOS_SocketInterface> _socket; - SimpleBuffer _input; - SimpleBuffer _output; - Taint _taint; - bool _eof; + vespalib::SocketHandle _socket; + SimpleBuffer _input; + SimpleBuffer _output; + Taint _taint; + bool _eof; public: - Socket(std::unique_ptr<FastOS_SocketInterface> socket); - Socket(const string host, int port); - virtual ~Socket(); + Socket(vespalib::SocketHandle socket); + Socket(const string &host, int port); virtual bool eof() const override { return _eof; } virtual Memory obtain() override; virtual Input &evict(size_t bytes) override; @@ -38,5 +37,20 @@ public: virtual const Taint &tainted() const override { return _taint; } }; +struct ServerSocket { + vespalib::ServerSocket server_socket; + ServerSocket() : server_socket(0) {} + int port() const { return server_socket.address().port(); } + Stream::UP accept() { + vespalib::SocketHandle handle = server_socket.accept(); + if (handle.valid()) { + return std::make_unique<Socket>(std::move(handle)); + } else { + return Stream::UP(); + } + } + void close() { server_socket.shutdown(); } +}; + } // namespace vbench diff --git a/vbench/src/vbench/test/CMakeLists.txt b/vbench/src/vbench/test/CMakeLists.txt index ddd37822969..2691e78e689 100644 --- a/vbench/src/vbench/test/CMakeLists.txt +++ b/vbench/src/vbench/test/CMakeLists.txt @@ -2,7 +2,6 @@ vespa_add_library(vbench_test STATIC SOURCES request_receptor.cpp - server_socket.cpp simple_http_result_handler.cpp DEPENDS ) diff --git a/vbench/src/vbench/test/all.h b/vbench/src/vbench/test/all.h index c8dd8cf9ac8..3b4167285d9 100644 --- a/vbench/src/vbench/test/all.h +++ b/vbench/src/vbench/test/all.h @@ -39,7 +39,6 @@ #include <vbench/core/stream.h> #include <vespa/vespalib/data/input.h> #include <vbench/test/simple_http_result_handler.h> -#include <vbench/test/server_socket.h> #include <vbench/test/request_receptor.h> #include <vbench/http/hex_number.h> #include <vbench/http/http_result_handler.h> diff --git a/vbench/src/vbench/test/server_socket.cpp b/vbench/src/vbench/test/server_socket.cpp deleted file mode 100644 index b87a245dc88..00000000000 --- a/vbench/src/vbench/test/server_socket.cpp +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. - - -#include <vespa/fastos/fastos.h> -#include "server_socket.h" -#include <vbench/core/socket.h> -#include <vespa/vespalib/util/thread.h> - -namespace vbench { - -ServerSocket::ServerSocket() - : _serverSocket(0, 500, 0, 0), - _closed(false) -{ - _serverSocket.SetSoBlocking(false); - _serverSocket.Listen(); -} - -Stream::UP -ServerSocket::accept() -{ - while (!_closed) { - std::unique_ptr<FastOS_SocketInterface> socket(_serverSocket.Accept()); - if (socket.get() != 0) { - socket->SetSoBlocking(true); - return Stream::UP(new Socket(std::move(socket))); - } else { - int error = FastOS_Socket::GetLastError(); - if (error == FastOS_Socket::ERR_WOULDBLOCK) { - vespalib::Thread::sleep(10); - } else { - return Stream::UP(); - } - } - } - return Stream::UP(); -} - -} // namespace vbench diff --git a/vbench/src/vbench/test/server_socket.h b/vbench/src/vbench/test/server_socket.h deleted file mode 100644 index 6be9673142f..00000000000 --- a/vbench/src/vbench/test/server_socket.h +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. - - -#pragma once - -#include <vbench/core/stream.h> -#include <vespa/fastos/serversocket.h> - -namespace vbench { - -/** - * Simple server socket listening to a random port. - **/ -class ServerSocket -{ -private: - FastOS_ServerSocket _serverSocket; - volatile bool _closed; - -public: - ServerSocket(); - Stream::UP accept(); - int port() { return _serverSocket.GetLocalPort(); } - void close() { _closed = true; } -}; - -} // namespace vbench - |