diff options
| author | vovanec <vovanec@90c681e8-e032-0410-971d-27865f9a5e38> | 2008-02-07 13:36:34 +0000 |
|---|---|---|
| committer | vovanec <vovanec@90c681e8-e032-0410-971d-27865f9a5e38> | 2008-02-07 13:36:34 +0000 |
| commit | 06d1877811fa6aa97dddc0e03bcde4e766928c87 (patch) | |
| tree | c25462d0e58c3d58c728664440412bf4f16a49ec /src/ui/unixdomainsocket.cpp | |
| parent | 3f6b60f23c44a8ba8dd97ca6f41a16e2af7ef2f7 (diff) | |
| download | qmmp-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.cpp | 67 |
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); +} + + + |
