diff --git a/common/cpp/include/system_wrappers/system_io.h b/common/cpp/include/system_wrappers/system_io.h index 78f742e018e4c28f5909faaf91ef31cd0b688005..65a18e029acb92a6dd83746a5611136ac579fecf 100644 --- a/common/cpp/include/system_wrappers/system_io.h +++ b/common/cpp/include/system_wrappers/system_io.h @@ -14,6 +14,8 @@ class SystemIO final : public IO { private: static const int kNetBufferSize;//TODO: need to set by config + void ApplyNetworkOptions(SocketDescriptor socket_fd, IOErrors * err) const; + //void CollectFileInformationRecursivly(const std::string& path, std::vector<FileInfo>* files, IOErrors* err) const; int FileOpenModeToPosixFileOpenMode(int open_flags) const; IOErrors GetLastError() const; @@ -58,7 +60,7 @@ class SystemIO final : public IO { void InetBind(SocketDescriptor socket_fd, const std::string& address, IOErrors* err) const; std::unique_ptr<std::tuple<std::string, SocketDescriptor>> InetAccept(SocketDescriptor socket_fd, IOErrors* err) const; void InetConnect(SocketDescriptor socket_fd, const std::string& address, IOErrors* err) const; - SocketDescriptor CreateAndConnectIPTCPSocket(const std::string& address, IOErrors* err) const; + SocketDescriptor CreateAndConnectIPTCPSocket(const std::string& address, IOErrors* err) const; size_t Receive(SocketDescriptor socket_fd, void* buf, size_t length, IOErrors* err) const; size_t ReceiveTimeout(SocketDescriptor socket_fd, void* buf, size_t length, long timeout_in_usec, IOErrors* err) const; diff --git a/common/cpp/src/system_io.cpp b/common/cpp/src/system_io.cpp index 22dc6a9072aca13cc52b63da85c814080532b72b..ccd872dbd3ca6b90db200bcd4d67be146c9fd10b 100644 --- a/common/cpp/src/system_io.cpp +++ b/common/cpp/src/system_io.cpp @@ -36,6 +36,19 @@ void StripBasePath(const std::string& folder, std::vector<FileInfo>* file_list) // PRIVATE FUNCTIONS - END + +void hidra2::SystemIO::ApplyNetworkOptions(SocketDescriptor socket_fd, IOErrors* err) const +{ + if ( + setsockopt(socket_fd, SOL_SOCKET, SO_SNDBUF, (char*)&kNetBufferSize, sizeof(kNetBufferSize)) != 0 + || + setsockopt(socket_fd, SOL_SOCKET, SO_SNDBUF, (char*)&kNetBufferSize, sizeof(kNetBufferSize)) != 0 + ) { + *err = GetLastError(); + } +} + + std::thread* SystemIO::NewThread(std::function<void()> function) const { return new std::thread(function); } @@ -71,8 +84,6 @@ hidra2::FileDescriptor hidra2::SystemIO::CreateAndConnectIPTCPSocket(const std:: FileDescriptor fd = CreateSocket(AddressFamilies::INET, SocketTypes::STREAM, SocketProtocols::IP, err); - setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &kNetBufferSize, sizeof(kNetBufferSize)); - setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &kNetBufferSize, sizeof(kNetBufferSize)); if(*err != IOErrors::kNoError) { return -1; @@ -235,16 +246,16 @@ SocketDescriptor SystemIO::CreateSocket(AddressFamilies address_family, return -1; } - int socket_fd = _socket(domain, type, protocol); + SocketDescriptor socket_fd = _socket(domain, type, protocol); if(socket_fd == -1) { *err = GetLastError(); return socket_fd; } - setsockopt(socket_fd, SOL_SOCKET, SO_SNDBUF, &kNetBufferSize, sizeof(kNetBufferSize)); - setsockopt(socket_fd, SOL_SOCKET, SO_RCVBUF, &kNetBufferSize, sizeof(kNetBufferSize)); + *err = IOErrors::kNoError; + + ApplyNetworkOptions(socket_fd, err); - *err = IOErrors::kNoError; return socket_fd; } @@ -473,8 +484,7 @@ IOErrors* err) const { return nullptr; } - setsockopt(peer_fd, SOL_SOCKET, SO_RCVBUF, &kNetBufferSize, sizeof(kNetBufferSize)); - setsockopt(peer_fd, SOL_SOCKET, SO_SNDBUF, &kNetBufferSize, sizeof(kNetBufferSize)); + ApplyNetworkOptions(peer_fd, err); std::string address = std::string(inet_ntoa(client_address.sin_addr)) + ':' + std::to_string(client_address.sin_port); diff --git a/common/cpp/src/system_io_windows.cpp b/common/cpp/src/system_io_windows.cpp index 1e84733c7ae6a2a546fe81b5efefff97a29619d2..9d36dac2729b1f1c0056d5a1a56869d577cc074b 100644 --- a/common/cpp/src/system_io_windows.cpp +++ b/common/cpp/src/system_io_windows.cpp @@ -37,7 +37,6 @@ IOErrors IOErrorFromGetLastError() { } } - IOErrors SystemIO::GetLastError() const { return IOErrorFromGetLastError(); } diff --git a/tests/system_io/ip_tcp_network_speedtest/ip_tcp_network_speedtest.cpp b/tests/system_io/ip_tcp_network_speedtest/ip_tcp_network_speedtest.cpp index c58a5736f33d5b4cb232f99c8da4b862216f8501..5dd9efb42793a64193796c4a9135784c59aa2b02 100644 --- a/tests/system_io/ip_tcp_network_speedtest/ip_tcp_network_speedtest.cpp +++ b/tests/system_io/ip_tcp_network_speedtest/ip_tcp_network_speedtest.cpp @@ -20,7 +20,7 @@ static const std::unique_ptr<SystemIO> io(new SystemIO()); static const std::string kListenAddress = "127.0.0.1:4206"; static std::promise<void> kThreadStarted; -static size_t kTestSize = size_t(1024) * size_t(1024) * size_t(1024) * size_t(1); //1GiByte +static size_t kTestSize = size_t(1024) * size_t(1024) * size_t(512); //512MiByte static int kTestCount = 50; void Exit(int exit_number) {