From d7f2590a7bd6bba386dfbc0090d0c4649925b1d4 Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Sat, 20 Sep 2014 14:28:45 +0200 Subject: New socket reading code (posix, not qt). --- src/inputstreamer.cc | 43 +++++++++++++++++++++++++++++++++++++++++-- src/inputstreamer.h | 11 +++++++++-- 2 files changed, 50 insertions(+), 4 deletions(-) diff --git a/src/inputstreamer.cc b/src/inputstreamer.cc index 495f199..04edc7b 100644 --- a/src/inputstreamer.cc +++ b/src/inputstreamer.cc @@ -34,14 +34,36 @@ #define CSRC_A 43 InputStreamer::InputStreamer(QHostAddress addr, quint16 port) - : socket(this) +// : socket(this) { total = 0; - socket.bind(port); + this->addr = addr; this->port = port; + name.sin_family = AF_INET; + sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); + if(sock < 0) { + perror("socket()"); + return; + } + + name.sin_port = htons(port); + + name.sin_addr.s_addr = inet_addr(addr.toString().toStdString().c_str()); + if(INADDR_NONE == name.sin_addr.s_addr) { + printf("Could not parse IP address: %s\n", + addr.toString().toStdString().c_str()); + return; + } + + if(bind(sock, (struct sockaddr *)&name, sizeof(name)) < 0) { + close(sock); + perror("bind()"); + return; + } + running = true; start(); } @@ -50,6 +72,8 @@ InputStreamer::~InputStreamer() { running = false; wait(); + + close(sock); } #include @@ -69,6 +93,7 @@ void InputStreamer::run() char packet[64*1024]; while(running) { + /* if(!socket.hasPendingDatagrams()) { qApp->processEvents(); usleep(2000); // sleep 2ms @@ -79,6 +104,20 @@ void InputStreamer::run() if(packetsize < 1) { continue; } + */ + + ssize_t packetsize = recv(sock, (char*)packet, sizeof(packet), 0); + if(packetsize == -1) { + perror("recv()"); + usleep(100); // sleep 2ms + continue; + } + + if(packetsize == 0) { + usleep(100); // sleep 2ms + continue; + } + total += packetsize; // Now decode the sucker.... diff --git a/src/inputstreamer.h b/src/inputstreamer.h index 168485e..842e0d2 100644 --- a/src/inputstreamer.h +++ b/src/inputstreamer.h @@ -28,8 +28,12 @@ #define __SIMPLERTP_INPUTSTREAMER_H__ #include -#include #include +#include +//#include +#include +#include +#include #include @@ -55,7 +59,10 @@ private: QHostAddress addr; quint16 port; - QUdpSocket socket; + // QUdpSocket socket; + int sock; + struct sockaddr_in name; + struct ip_mreq mreq; size_t total; -- cgit v1.2.3