aboutsummaryrefslogtreecommitdiff
path: root/src/ui/unixdomainsocket.cpp
diff options
context:
space:
mode:
authorvovanec <vovanec@90c681e8-e032-0410-971d-27865f9a5e38>2008-02-07 13:36:34 +0000
committervovanec <vovanec@90c681e8-e032-0410-971d-27865f9a5e38>2008-02-07 13:36:34 +0000
commit06d1877811fa6aa97dddc0e03bcde4e766928c87 (patch)
treec25462d0e58c3d58c728664440412bf4f16a49ec /src/ui/unixdomainsocket.cpp
parent3f6b60f23c44a8ba8dd97ca6f41a16e2af7ef2f7 (diff)
downloadqmmp-06d1877811fa6aa97dddc0e03bcde4e766928c87.tar.gz
qmmp-06d1877811fa6aa97dddc0e03bcde4e766928c87.tar.bz2
qmmp-06d1877811fa6aa97dddc0e03bcde4e766928c87.zip
new directory structure
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@232 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/ui/unixdomainsocket.cpp')
-rw-r--r--src/ui/unixdomainsocket.cpp67
1 files changed, 67 insertions, 0 deletions
diff --git a/src/ui/unixdomainsocket.cpp b/src/ui/unixdomainsocket.cpp
new file mode 100644
index 000000000..5769676be
--- /dev/null
+++ b/src/ui/unixdomainsocket.cpp
@@ -0,0 +1,67 @@
+#include <unistd.h>
+#include <strings.h>
+#include <string.h>
+#include <errno.h>
+
+#include "unixdomainsocket.h"
+
+
+UnixDomainSocket::UnixDomainSocket(QObject * parent ) : QUdpSocket(parent){
+ _bound = false;
+ _s = socket(AF_UNIX, SOCK_DGRAM, 0);
+ this->setSocketDescriptor(_s);
+}
+
+UnixDomainSocket::~UnixDomainSocket(){
+
+ if(_bound){
+ ::unlink(_local.sun_path);
+ }
+}
+
+bool UnixDomainSocket::bind(const QString& path){
+
+ int len;
+ bzero(&_local,sizeof(_local));
+ _local.sun_family = AF_UNIX;
+ strcpy(_local.sun_path,path.toLocal8Bit().data());
+ len = strlen(_local.sun_path) + sizeof(_local.sun_family);
+ bool res = !(::bind(_s, (struct sockaddr *)&_local, len));
+ if(res)
+ _bound = true;
+ return res;
+}
+
+
+bool UnixDomainSocket::alive(const QString& path)
+{
+ socklen_t len;
+ struct sockaddr_un server;
+ bzero(&server,sizeof(server));
+ server.sun_family = AF_UNIX;
+ strcpy(server.sun_path,path.toLocal8Bit().data());
+ len = strlen(server.sun_path) + sizeof(server.sun_family);
+
+ if (::connect(_s, (struct sockaddr *)&server, len) == -1)
+ {
+ perror("connect");
+ return false;
+ }
+ return true;
+}
+//
+void UnixDomainSocket::writeDatagram(const char* command,const QString& path)
+{
+ socklen_t len;
+ struct sockaddr_un server;
+ bzero(&server,sizeof(server));
+ server.sun_family = AF_UNIX;
+ strcpy(server.sun_path,path.toLocal8Bit().data());
+
+ len = strlen(server.sun_path) + sizeof(server.sun_family);
+
+ sendto(_s,command,strlen(command),0,(struct sockaddr*)&server,len);
+}
+
+
+