32 {
33
34 if (argc != 2) {
35 std::cerr << "Usage: " << argv[0] << " <path>\n";
36 return EXIT_FAILURE;
37 }
38#ifdef _WIN32
39 if (!SetConsoleCtrlHandler(console_handler, TRUE)) {
40 std::cerr << "Error setting console handler\n";
41 return EXIT_FAILURE;
42 }
43#else
44 struct sigaction sa = {};
46 sa.sa_flags = 0;
47 if (sigaction(SIGINT, &sa, nullptr) == -1) {
48 perror("sigaction");
49 return EXIT_FAILURE;
50 }
51#endif
52 try {
54 if (sock.bind_unix(argv[1])) {
55 std::cout << "Listening for UDP datagram on port " << argv[1] << "...\n";
56 std::vector<uint8_t> buffer(65536);
59 ssize_t bytes = sock.recvfrom(buffer.data(), buffer.size());
60 if (bytes > 0) {
61 std::cout << "Received " << bytes << " bytes.\n";
62 std::string data(buffer.begin(), buffer.end());
63 std::cout << "Data: " << data;
64 } else if (bytes < 0) {
65 if (errno == EINTR)
66 continue;
67 std::cerr << "read error.\n";
68 break;
69 }
70 }
71 }
73 std::cerr <<
"Exception: " << e.
text() <<
"\n";
74 return EXIT_FAILURE;
75 }
76 return EXIT_SUCCESS;
77}
Lightweight exception wrapper for MXNetwork failures.
std::string text() const
Return the stored error text.
C++ wrapper around the MXNetwork socket API.
@ TYPE_UNIX_DGRAM
UNIX-domain datagram socket.