diff --git a/cpp/main.cpp b/cpp/main.cpp index c0ad1b4..e188cb8 100644 --- a/cpp/main.cpp +++ b/cpp/main.cpp @@ -16,19 +16,14 @@ #include struct Packet { - size_t len; - uint8_t* data; + size_t len; uint8_t* data; Packet(const uint8_t *input, size_t num_bytes) { - len = num_bytes; - - data = new uint8_t[len]; + len = num_bytes; data = new uint8_t[len]; std::memcpy(data, input, len); }; - ~Packet() { - delete[] data; - } + ~Packet() { delete[] data; } [[nodiscard]] std::string print() const { std::stringstream out; @@ -42,18 +37,13 @@ struct Packet { template class ThreadSafeQueue { std::queue _queue = std::queue(); - - std::mutex _mutex; - std::condition_variable _cond; + std::mutex _mutex; std::condition_variable _cond; public: ThreadSafeQueue() = default; void push(T item) { - _mutex.lock(); - _queue.push(item); - _mutex.unlock(); - + _mutex.lock(); _queue.push(item); _mutex.unlock(); _cond.notify_one(); } @@ -79,11 +69,8 @@ int tun_alloc(const char *dev, short flags) { perror("Opening /dev/net/tun"); return fd; } - memset(&ifr, 0, sizeof(ifr)); - ifr.ifr_flags = flags; - strncpy(ifr.ifr_name, dev, IFNAMSIZ); if( (err = ioctl(fd, TUNSETIFF, (void *)&ifr)) < 0 ) { @@ -95,12 +82,6 @@ int tun_alloc(const char *dev, short flags) { return fd; } -volatile sig_atomic_t stop = 0; - -void interrupt_handler(int signum) { - stop = 1; -} - std::mutex print_lock; void consumer(const int index, ThreadSafeQueue *queue) { @@ -118,10 +99,7 @@ void consumer(const int index, ThreadSafeQueue *queue) { } int main() { - signal(SIGINT, interrupt_handler); - int tun = tun_alloc("nc%d", IFF_TUN); - auto queue = new ThreadSafeQueue(); std::thread threads[10]; @@ -134,19 +112,12 @@ int main() { std::thread reader([tun, queue]() { uint8_t buffer[1500]; - while (!stop) { + while (true) { int num_bytes = read(tun, &buffer, 1500); if (num_bytes != 0) { auto *packet = new Packet(buffer, num_bytes); queue->push(packet); - } else { - stop = 1; - }; + } } }); - - while (!stop) pause(); - - std::cout << "terminating..." << std::endl; - std::terminate(); }