QSocket --> BSD sockets
authorTorste Aikio <zokier@zokier.laptop>
Wed, 23 Jun 2010 11:47:38 +0000 (14:47 +0300)
committerTorste Aikio <zokier@zokier.laptop>
Wed, 23 Jun 2010 11:47:38 +0000 (14:47 +0300)
Does not work yet!

src/irctrl.cpp

index bf0b89e..94c6329 100644 (file)
@@ -1,8 +1,16 @@
 #include <cstdlib>
 
+#include <sys/socket.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <netinet/in.h>
+#include <netinet/ip.h>
+#include <netinet/tcp.h>
+
 #include <QSettings>
-#include <QTcpSocket>
-#include <QHostAddress>
+#include <QByteArray>
+#include <QString>
+#include <QDebug>
 
 #include "irctrl.h"
 
@@ -31,18 +39,29 @@ void IrCtrl::sendCmd(const QString &cmd)
         m_killLircTimer.stop();
     }
 
-    QTcpSocket sock;
-    QSettings settings(this);
-    sock.setSocketOption(QAbstractSocket::LowDelayOption, 1);
-    sock.connectToHost(QHostAddress::LocalHost, 
-            settings.value("lircPort", LIRC_PORT).toInt(),
-            QIODevice::WriteOnly | QIODevice::Unbuffered);
-    sock.waitForConnected();
+    QSettings settings;
     QString remoteName = settings.value("remoteName", "").toString();
     QString cmdStr = "SEND_ONCE " + remoteName + " " + cmd + "\n";
-    sock.write(cmdStr.toAscii());
-    sock.waitForBytesWritten();
-    sock.close();
+    QByteArray buf = cmdStr.toAscii();
+
+    sockaddr_in addr;
+    memset(&addr, 0, sizeof(addr));
+    addr.sin_family      = AF_INET;
+    addr.sin_addr.s_addr = INADDR_LOOPBACK;
+    addr.sin_port        = LIRC_PORT;
+    int sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+    if (sock == -1) {
+        qDebug() << "Socket open fail";
+    } else {
+        int c = ::connect(sock, (sockaddr*)&addr, sizeof(sockaddr_in));
+        if (c == 0) {
+            write(sock, buf.constData(), buf.count());
+        } else {
+            qDebug() << "Connect fail";
+        }
+        shutdown(sock, SHUT_RDWR);
+        close(sock);
+    }
 
     m_killLircTimer.start();
 }