Skip to content
Snippets Groups Projects
Select Git revision
  • e554f7fdcede04711cc20296fc1c0f4028df41b8
  • master default
  • ci-bump-test
  • abp-queue
  • new-delete-leaks
  • fused-continuation-and-completion-stealing
  • emper-fix-invalid-conv
  • remote-put-get-free-context-cycle
  • linux-version-construct-on-first-use
  • libstdc++-asserts
  • msan
  • libc++
  • completer-strategies
  • cactus_stack_devel_one_commit
  • client-load-change
  • cppcheck
  • flow
  • cast-if-future
  • async_network2
  • thread_safe_log_config
  • burak
  • attic/clang-release-tls-optimization-debug-and-fix
  • attic/continuation-stealing-dev
23 results

EchoClient.cpp

Blame
  • Forked from Lehrstuhl für Informatik 4 (Systemsoftware) / manycore / emper
    Source project has a limited visibility.
    EchoClient.cpp 11.40 KiB
    // SPDX-License-Identifier: LGPL-3.0-or-later
    // Copyright © 2021 Florian Fischer
    #include <fcntl.h>
    #include <netdb.h>	//for getaddrinfo
    #include <netinet/in.h>
    #include <netinet/tcp.h>
    #include <sys/socket.h>	 // for shutdown, socket, AF_INET
    #include <sys/stat.h>
    #include <unistd.h>
    
    #include <algorithm>	// for find
    #include <atomic>
    #include <cerrno>		// for errno, ECANCELED
    #include <chrono>		// for nanoseconds, duration, durat...
    #include <cstdint>	// for uint64_t, int32_t
    #include <cstdlib>	// for size_t, strtol, exit, EXIT_F...
    #include <cstring>	// for memcmp
    #include <iomanip>
    #include <iostream>	 // for operator<<, basic_ostream, endl
    #include <string>		 // for allocator, string, char_traits
    #include <thread>
    #include <utility>
    
    #include "Common.hpp"										 // for DIE_MSG_ERRNO, DIE_MSG, unli...
    #include "CountingPrivateSemaphore.hpp"	 // for CPS
    #include "Debug.hpp"										 // for LOGE
    #include "Fiber.hpp"										 // for Fiber
    #include "Runtime.hpp"									 // for Runtime
    #include "Semaphore.hpp"								 // for Semaphore
    #include "emper.hpp"										 // for spawn
    #include "io.hpp"												 // for connectAndWait
    #include "io/Future.hpp"								 // for CloseFuture, RecvFuture, Sen...
    #include "lib/math.hpp"
    
    using emper::Semaphore;
    using emper::io::CloseFuture;
    using emper::io::RecvFuture;
    using emper::io::SendFuture;
    
    using emper::lib::math::RunningAverage;
    
    using std::chrono::duration_cast;
    using std::chrono::high_resolution_clock;
    using std::chrono::nanoseconds;
    using std::chrono::seconds;
    
    // Defaults
    const int DECIMAL = 10;
    const std::string HOST = "0.0.0.0";
    const std::string PORT = "12345";
    const size_t ITERATIONS = 10000;
    const size_t CLIENTS = 10000;
    const size_t SIZE = 32;
    const size_t SERVER_BACKLOG = 1024;
    
    const seconds ONERROR_SLEEP(10);
    
    // Globals
    std::string host = HOST;
    std::string port = PORT;
    size_t iterations = ITERATIONS;
    size_t execution_seconds = 0;
    size_t clients = CLIENTS;
    size_t size = SIZE;
    size_t server_backlog = SERVER_BACKLOG;
    bool linked_futures;
    
    std::atomic<bool> terminate = false;
    
    std::atomic<size_t> client_ids = 0;