438 {
441
442#ifdef _WIN32
443 if (!SetConsoleCtrlHandler(console_handler, TRUE)) {
444 std::cerr << "fileserve: Could not install console handler.\n";
445 return EXIT_FAILURE;
446 }
447#else
448 struct sigaction sa = {};
450 sa.sa_flags = 0;
451 if (sigaction(SIGINT, &sa, nullptr) == -1) {
452 std::cerr << "fileserve: Could not install signal handler.\n";
453 return EXIT_FAILURE;
454 }
455#endif
456
457 unsigned int port = 0;
458 try {
459 if (argc == 2) {
461 return EXIT_FAILURE;
462 }
464 } else if (argc == 3) {
466 return EXIT_FAILURE;
467 }
468 std::cout << "Connecting...\n";
470 } else {
471 std::cerr << "Error use:\n"
472 << argv[0] << " <port>\t\tfor listen (server)\n"
473 << argv[0] << " <host> <port>\tfor connect (client)\n";
474 return EXIT_SUCCESS;
475 }
477 std::cerr <<
"fileserve: " << error.
text() <<
"\n";
478 return EXIT_FAILURE;
479 }
480
481 std::cout << "fileserve: Exiting.\n";
482 return EXIT_SUCCESS;
483}
Lightweight exception wrapper for MXNetwork failures.
std::string text() const
Return the stored error text.
void mx_socket_ignore_pipe_signal()
Ignore SIGPIPE on platforms that require it.
void connect_client(std::string_view host, std::string_view port)
void listen_server(std::string_view port)
bool validate_port(const char *program, const char *value, unsigned int &port)
RAII helper that initializes and shuts down the platform socket subsystem.