PageRenderTime 20ms CodeModel.GetById 9ms app.highlight 6ms RepoModel.GetById 1ms app.codeStats 0ms

/vp_plugins/qtservice-2.6_1-opensource/src/qtunixsocket.cpp

http://cupsfilter.googlecode.com/
C++ | 84 lines | 35 code | 4 blank | 45 comment | 5 complexity | bcfc3a7102f4d45a5e894d0ec0c23df2 MD5 | raw file
 1/****************************************************************************
 2** 
 3** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 4** All rights reserved.
 5** Contact: Nokia Corporation (qt-info@nokia.com)
 6** 
 7** This file is part of a Qt Solutions component.
 8**
 9** Commercial Usage  
10** Licensees holding valid Qt Commercial licenses may use this file in
11** accordance with the Qt Solutions Commercial License Agreement provided
12** with the Software or, alternatively, in accordance with the terms
13** contained in a written agreement between you and Nokia.
14** 
15** GNU Lesser General Public License Usage
16** Alternatively, this file may be used under the terms of the GNU Lesser
17** General Public License version 2.1 as published by the Free Software
18** Foundation and appearing in the file LICENSE.LGPL included in the
19** packaging of this file.  Please review the following information to
20** ensure the GNU Lesser General Public License version 2.1 requirements
21** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
22** 
23** In addition, as a special exception, Nokia gives you certain
24** additional rights. These rights are described in the Nokia Qt LGPL
25** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this
26** package.
27** 
28** GNU General Public License Usage 
29** Alternatively, this file may be used under the terms of the GNU
30** General Public License version 3.0 as published by the Free Software
31** Foundation and appearing in the file LICENSE.GPL included in the
32** packaging of this file.  Please review the following information to
33** ensure the GNU General Public License version 3.0 requirements will be
34** met: http://www.gnu.org/copyleft/gpl.html.
35** 
36** Please note Third Party Software included with Qt Solutions may impose
37** additional restrictions and it is the user's responsibility to ensure
38** that they have met the licensing requirements of the GPL, LGPL, or Qt
39** Solutions Commercial license and the relevant license of the Third
40** Party Software they are using.
41** 
42** If you are unsure which license is appropriate for your use, please
43** contact Nokia at qt-info@nokia.com.
44** 
45****************************************************************************/
46
47#include "qtunixsocket.h"
48#include <sys/types.h>
49#include <sys/un.h>
50#include <sys/socket.h>
51#include <string.h>
52#include <unistd.h>
53
54#ifndef SUN_LEN
55#define SUN_LEN(ptr) ((size_t)(((struct sockaddr_un *) 0)->sun_path) \
56                      +strlen ((ptr)->sun_path))
57#endif
58
59QtUnixSocket::QtUnixSocket(QObject *parent)
60    : QTcpSocket(parent)
61{
62}
63
64bool QtUnixSocket::connectTo(const QString &path)
65{
66    bool ret = false;
67    int sock = ::socket(PF_UNIX, SOCK_STREAM, 0);
68    if (sock != -1) {
69        struct sockaddr_un addr;
70	::memset(&addr, 0, sizeof(struct sockaddr_un));
71	addr.sun_family = AF_UNIX;
72	size_t pathlen = strlen(path.toLatin1().constData());
73        pathlen = qMin(pathlen, sizeof(addr.sun_path));
74	::memcpy(addr.sun_path, path.toLatin1().constData(), pathlen);
75	int err = ::connect(sock, (struct sockaddr *)&addr, SUN_LEN(&addr));
76        if (err != -1) {
77            setSocketDescriptor(sock);
78	    ret = true;
79	} else {
80            ::close(sock);
81        }
82    }
83    return ret;
84}