aboutsummaryrefslogtreecommitdiffstats
path: root/vbench
diff options
context:
space:
mode:
authorHaavard <havardpe@yahoo-inc.com>2017-04-21 14:33:12 +0000
committerHaavard <havardpe@yahoo-inc.com>2017-04-21 21:04:33 +0000
commitbbf11af22fff91b6f8f757a252ee4255bd018166 (patch)
tree7f8306230bfc0d37a7baa91589705c0cdd571a0c /vbench
parent33390132c1249768e445d8272bbfe421c6d2a5fc (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.txt1
-rw-r--r--vbench/src/tests/server_socket/.gitignore1
-rw-r--r--vbench/src/tests/server_socket/CMakeLists.txt9
-rw-r--r--vbench/src/tests/server_socket/FILES1
-rw-r--r--vbench/src/tests/server_socket/server_socket_test.cpp24
-rw-r--r--vbench/src/vbench/core/socket.cpp33
-rw-r--r--vbench/src/vbench/core/socket.h34
-rw-r--r--vbench/src/vbench/test/CMakeLists.txt1
-rw-r--r--vbench/src/vbench/test/all.h1
-rw-r--r--vbench/src/vbench/test/server_socket.cpp39
-rw-r--r--vbench/src/vbench/test/server_socket.h28
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
-