diff options
author | Bent Bisballe Nyeng <deva@aasimon.org> | 2014-09-20 14:28:45 +0200 |
---|---|---|
committer | Bent Bisballe Nyeng <deva@aasimon.org> | 2014-09-20 14:28:45 +0200 |
commit | d7f2590a7bd6bba386dfbc0090d0c4649925b1d4 (patch) | |
tree | 6667eeb21c35b3d7043c384ccd4cec92233f3341 | |
parent | 7043d9c3e8c722fbf90153d3a19df7e77b4c6a4c (diff) |
New socket reading code (posix, not qt).
-rw-r--r-- | src/inputstreamer.cc | 43 | ||||
-rw-r--r-- | 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 <unistd.h> @@ -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 <QObject> -#include <QUdpSocket> #include <QThread> +#include <QHostAddress> +//#include <QUdpSocket> +#include <sys/socket.h> +#include <netinet/in.h> +#include <arpa/inet.h> #include <lrtp.h> @@ -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; |