Qt 4.8
Public Types | Public Functions | Protected Functions | Private Functions | Properties | Friends | List of all members
QUnixSocketServer Class Referenceabstract

The QUnixSocketServer class provides a Unix domain socket based server. More...

#include <qunixsocketserver_p.h>

Inheritance diagram for QUnixSocketServer:
QObject

Public Types

enum  ServerError {
  NoError, InvalidPath, ResourceError, BindError,
  ListenError
}
 The ServerError enumeration represents the errors that can occur during server establishment. More...
 

Public Functions

void close ()
 Stop listening for incoming connections and resets the Unix socket server's state. More...
 
bool isListening () const
 Returns true if this server is listening for incoming connections, false otherwise. More...
 
bool listen (const QByteArray &path)
 Tells the server to listen for incoming connections on path. More...
 
int maxPendingConnections () const
 Returns the maximum length the queue of pending connections may grow to. More...
 
 QUnixSocketServer (QObject *parent=0)
 Create a new Unix socket server with the given parent. More...
 
QByteArray serverAddress () const
 Returns the Unix path on which this server is listening. More...
 
ServerError serverError () const
 Returns the last server error. More...
 
void setMaxPendingConnections (int numConnections)
 Sets the maximum length the queue of pending connections may grow to numConnections. More...
 
int socketDescriptor () const
 
virtual ~QUnixSocketServer ()
 Stops listening for incoming connection and destroys the Unix socket server. More...
 
- Public Functions inherited from QObject
bool blockSignals (bool b)
 If block is true, signals emitted by this object are blocked (i.e., emitting a signal will not invoke anything connected to it). More...
 
const QObjectListchildren () const
 Returns a list of child objects. More...
 
bool connect (const QObject *sender, const char *signal, const char *member, Qt::ConnectionType type=Qt::AutoConnection) const
 
bool disconnect (const char *signal=0, const QObject *receiver=0, const char *member=0)
 
bool disconnect (const QObject *receiver, const char *member=0)
 
void dumpObjectInfo ()
 Dumps information about signal connections, etc. More...
 
void dumpObjectTree ()
 Dumps a tree of children to the debug output. More...
 
QList< QByteArraydynamicPropertyNames () const
 Returns the names of all properties that were dynamically added to the object using setProperty(). More...
 
virtual bool event (QEvent *)
 This virtual function receives events to an object and should return true if the event e was recognized and processed. More...
 
virtual bool eventFilter (QObject *, QEvent *)
 Filters events if this object has been installed as an event filter for the watched object. More...
 
template<typename T >
findChild (const QString &aName=QString()) const
 Returns the child of this object that can be cast into type T and that is called name, or 0 if there is no such object. More...
 
template<typename T >
QList< T > findChildren (const QString &aName=QString()) const
 Returns all children of this object with the given name that can be cast to type T, or an empty list if there are no such objects. More...
 
template<typename T >
QList< T > findChildren (const QRegExp &re) const
 
bool inherits (const char *classname) const
 Returns true if this object is an instance of a class that inherits className or a QObject subclass that inherits className; otherwise returns false. More...
 
void installEventFilter (QObject *)
 Installs an event filter filterObj on this object. More...
 
bool isWidgetType () const
 Returns true if the object is a widget; otherwise returns false. More...
 
void killTimer (int id)
 Kills the timer with timer identifier, id. More...
 
virtual const QMetaObjectmetaObject () const
 Returns a pointer to the meta-object of this object. More...
 
void moveToThread (QThread *thread)
 Changes the thread affinity for this object and its children. More...
 
QString objectName () const
 
QObjectparent () const
 Returns a pointer to the parent object. More...
 
QVariant property (const char *name) const
 Returns the value of the object's name property. More...
 
Q_INVOKABLE QObject (QObject *parent=0)
 Constructs an object with parent object parent. More...
 
void removeEventFilter (QObject *)
 Removes an event filter object obj from this object. More...
 
void setObjectName (const QString &name)
 
void setParent (QObject *)
 Makes the object a child of parent. More...
 
bool setProperty (const char *name, const QVariant &value)
 Sets the value of the object's name property to value. More...
 
void setUserData (uint id, QObjectUserData *data)
 
bool signalsBlocked () const
 Returns true if signals are blocked; otherwise returns false. More...
 
int startTimer (int interval)
 Starts a timer and returns a timer identifier, or returns zero if it could not start a timer. More...
 
QThreadthread () const
 Returns the thread in which the object lives. More...
 
QObjectUserDatauserData (uint id) const
 
virtual ~QObject ()
 Destroys the object, deleting all its child objects. More...
 

Protected Functions

virtual void incomingConnection (int socketDescriptor)=0
 This method is invoked each time a new incoming connection is established with the server. More...
 
- Protected Functions inherited from QObject
virtual void childEvent (QChildEvent *)
 This event handler can be reimplemented in a subclass to receive child events. More...
 
virtual void connectNotify (const char *signal)
 This virtual function is called when something has been connected to signal in this object. More...
 
virtual void customEvent (QEvent *)
 This event handler can be reimplemented in a subclass to receive custom events. More...
 
virtual void disconnectNotify (const char *signal)
 This virtual function is called when something has been disconnected from signal in this object. More...
 
 QObject (QObjectPrivate &dd, QObject *parent=0)
 
int receivers (const char *signal) const
 Returns the number of receivers connected to the signal. More...
 
QObjectsender () const
 Returns a pointer to the object that sent the signal, if called in a slot activated by a signal; otherwise it returns 0. More...
 
int senderSignalIndex () const
 
virtual void timerEvent (QTimerEvent *)
 This event handler can be reimplemented in a subclass to receive timer events for the object. More...
 

Private Functions

QUnixSocketServeroperator= (const QUnixSocketServer &)
 
 QUnixSocketServer (const QUnixSocketServer &)
 

Properties

QUnixSocketServerPrivated
 

Friends

class QUnixSocketServerPrivate
 

Additional Inherited Members

- Public Slots inherited from QObject
void deleteLater ()
 Schedules this object for deletion. More...
 
- Signals inherited from QObject
void destroyed (QObject *=0)
 This signal is emitted immediately before the object obj is destroyed, and can not be blocked. More...
 
- Static Public Functions inherited from QObject
static bool connect (const QObject *sender, const char *signal, const QObject *receiver, const char *member, Qt::ConnectionType=Qt::AutoConnection)
 Creates a connection of the given type from the signal in the sender object to the method in the receiver object. More...
 
static bool connect (const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &method, Qt::ConnectionType type=Qt::AutoConnection)
 
static bool disconnect (const QObject *sender, const char *signal, const QObject *receiver, const char *member)
 Disconnects signal in object sender from method in object receiver. More...
 
static bool disconnect (const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &member)
 
static uint registerUserData ()
 
static QString tr (const char *sourceText, const char *comment=0, int n=-1)
 
static QString trUtf8 (const char *sourceText, const char *comment=0, int n=-1)
 
- Static Public Variables inherited from QObject
static const QMetaObject staticMetaObject
 This variable stores the meta-object for the class. More...
 
- Protected Variables inherited from QObject
QScopedPointer< QObjectDatad_ptr
 
- Static Protected Variables inherited from QObject
static const QMetaObject staticQtMetaObject
 

Detailed Description

The QUnixSocketServer class provides a Unix domain socket based server.

Warning
This function is not part of the public interface.
This function is not part of the public interface. :: :: ::

This class makes it possible to accept incoming Unix domain socket connections. Call QUnixSocketServer::listen() to have the server listen for incoming connections on a specified path. The pure virtual QUnixSocketServer::incomingConnection() is called each time a new connection is established. Users must inherit from QUnixSocketServer and implement this method.

If an error occurs, QUnixSocketServer::serverError() returns the type of error. Errors can only occur during server establishment - that is, during a call to QUnixSocketServer::listen() . Calling QUnixSocketServer::close() causes QUnixSocketServer to stop listening for connections and reset its state.

QUnixSocketServer is often used in conjunction with the QUnixSocket class.

See also
QUnixSocket

Definition at line 61 of file qunixsocketserver_p.h.

Enumerations

◆ ServerError

The ServerError enumeration represents the errors that can occur during server establishment.

The most recent error can be retrieved through a call to QUnixSocketServer::serverError() .

  • NoError No error has occurred.
  • InvalidPath An invalid path endpoint was passed to QUnixSocketServer::listen() . As defined by unix(7), invalid paths include an empty path, or what more than 107 characters long.
  • ResourceError An error acquiring or manipulating the system's socket resources occurred. For example, if the process runs out of available socket descriptors, a ResourceError will occur.
  • BindError The server was unable to bind to the specified path.
  • ListenError The server was unable to listen on the specified path for incoming connections.
Enumerator
NoError 
InvalidPath 
ResourceError 
BindError 
ListenError 

Definition at line 65 of file qunixsocketserver_p.h.

Constructors and Destructors

◆ QUnixSocketServer() [1/2]

QUnixSocketServer::QUnixSocketServer ( QObject parent = 0)

Create a new Unix socket server with the given parent.

Definition at line 141 of file qunixsocketserver.cpp.

142 : QObject(parent), d(0)
143 {
144 }
QUnixSocketServerPrivate * d
Q_INVOKABLE QObject(QObject *parent=0)
Constructs an object with parent object parent.
Definition: qobject.cpp:753

◆ ~QUnixSocketServer()

QUnixSocketServer::~QUnixSocketServer ( )
virtual

Stops listening for incoming connection and destroys the Unix socket server.

Definition at line 149 of file qunixsocketserver.cpp.

150 {
151  close();
152  if(d)
153  delete d;
154 }
void close()
Stop listening for incoming connections and resets the Unix socket server&#39;s state.
QUnixSocketServerPrivate * d

◆ QUnixSocketServer() [2/2]

QUnixSocketServer::QUnixSocketServer ( const QUnixSocketServer )
private

Functions

◆ close()

void QUnixSocketServer::close ( )

Stop listening for incoming connections and resets the Unix socket server's state.

Calling this method while QUnixSocketServer::isListening(){not listening } for incoming connections is a no-op.

See also
QUnixSocketServer::listen()

Definition at line 162 of file qunixsocketserver.cpp.

Referenced by listen(), and ~QUnixSocketServer().

163 {
164  if(!d)
165  return;
166 
167  if(d->acceptNotifier) {
168  d->acceptNotifier->setEnabled(false);
169  delete d->acceptNotifier;
170  }
171  d->acceptNotifier = 0;
172 
173  if(-1 != d->fd) {
174 #ifdef QUNIXSOCKET_DEBUG
175  int closerv =
176 #endif
177  ::close(d->fd);
178 #ifdef QUNIXSOCKET_DEBUG
179  if(0 != closerv) {
180  qDebug() << "QUnixSocketServer: Unable to close socket ("
181  << strerror(errno) << ')';
182  }
183 #endif
184  }
185  d->fd = -1;
186  d->address = QByteArray();
187  d->error = NoError;
188 }
QSocketNotifier * acceptNotifier
void close()
Stop listening for incoming connections and resets the Unix socket server&#39;s state.
The QByteArray class provides an array of bytes.
Definition: qbytearray.h:135
QUnixSocketServerPrivate * d
Q_CORE_EXPORT void qDebug(const char *,...)
void setEnabled(bool)
If enable is true, the notifier is enabled; otherwise the notifier is disabled.
QUnixSocketServer::ServerError error
int errno

◆ incomingConnection()

void QUnixSocketServer::incomingConnection ( int  socketDescriptor)
protectedpure virtual

This method is invoked each time a new incoming connection is established with the server.

Clients must reimplement this function in their QUnixSocketServer derived class to handle the connection.

A common approach to handling the connection is to pass socketDescriptor to a QUnixSocket instance.

See also
QUnixSocket

◆ isListening()

bool QUnixSocketServer::isListening ( ) const

Returns true if this server is listening for incoming connections, false otherwise.

See also
QUnixSocketServer::listen()

Definition at line 213 of file qunixsocketserver.cpp.

214 {
215  if(!d)
216  return false;
217 
218  return (-1 != d->fd);
219 }
QUnixSocketServerPrivate * d

◆ listen()

bool QUnixSocketServer::listen ( const QByteArray path)

Tells the server to listen for incoming connections on path.

Returns true if it successfully initializes, false otherwise. In the case of failure, the QUnixSocketServer::serverError() error status is set accordingly.

Calling this method while the server is already running will result in the server begin reset, and then attempting to listen on path. This will not affect connections established prior to the server being reset, but further incoming connections on the previous path will be refused.

The server can be explicitly reset by a call to QUnixSocketServer::close() .

See also
QUnixSocketServer::close()

Definition at line 235 of file qunixsocketserver.cpp.

Referenced by QWSServerSocket::init().

236 {
237  if(d) {
238  close(); // Any existing server is destroyed
239  } else {
240  d = new QUnixSocketServerPrivate(this);
241  }
242 
243  if(path.isEmpty() || path.size() > UNIX_PATH_MAX) {
244  d->error = InvalidPath;
245  return false;
246  }
247  unlink( path ); // ok if this fails
248 
249  // Create the socket
250  d->fd = ::socket(PF_UNIX, SOCK_STREAM, 0);
251  if(-1 == d->fd) {
252 #ifdef QUNIXSOCKETSERVER_DEBUG
253  qDebug() << "QUnixSocketServer: Unable to create socket ("
254  << strerror(errno) << ')';
255 #endif
256  close();
257  d->error = ResourceError;
258  return false;
259  }
260 
261  // Construct our unix address
262  struct ::sockaddr_un addr;
263  addr.sun_family = AF_UNIX;
264  ::memcpy(addr.sun_path, path.data(), path.size());
265  if(path.size() < UNIX_PATH_MAX)
266  addr.sun_path[path.size()] = '\0';
267 
268  // Attempt to bind
269  if(-1 == ::bind(d->fd, (sockaddr *)&addr, sizeof(sockaddr_un))) {
270 #ifdef QUNIXSOCKETSERVER_DEBUG
271  qDebug() << "QUnixSocketServer: Unable to bind socket ("
272  << strerror(errno) << ')';
273 #endif
274  close();
275  d->error = BindError;
276  return false;
277  }
278 
279  // Listen to socket
280  if(-1 == ::listen(d->fd, d->maxConns)) {
281 #ifdef QUNIXSOCKETSERVER_DEBUG
282  qDebug() << "QUnixSocketServer: Unable to listen socket ("
283  << strerror(errno) << ')';
284 #endif
285  close();
286  d->error = ListenError;
287  return false;
288  }
289 
290  // Success!
291  d->address = path;
293  d->acceptNotifier->setEnabled(true);
294  QObject::connect(d->acceptNotifier, SIGNAL(activated(int)),
295  d, SLOT(acceptActivated()));
296 
297  return true;
298 }
QSocketNotifier * acceptNotifier
char * data()
Returns a pointer to the data stored in the byte array.
Definition: qbytearray.h:429
void close()
Stop listening for incoming connections and resets the Unix socket server&#39;s state.
#define SLOT(a)
Definition: qobjectdefs.h:226
bool listen(const QByteArray &path)
Tells the server to listen for incoming connections on path.
The QSocketNotifier class provides support for monitoring activity on a file descriptor.
QUnixSocketServerPrivate * d
Q_CORE_EXPORT void qDebug(const char *,...)
#define SIGNAL(a)
Definition: qobjectdefs.h:227
static bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *member, Qt::ConnectionType=Qt::AutoConnection)
Creates a connection of the given type from the signal in the sender object to the method in the rece...
Definition: qobject.cpp:2580
void setEnabled(bool)
If enable is true, the notifier is enabled; otherwise the notifier is disabled.
QUnixSocketServer::ServerError error
int size() const
Returns the number of bytes in this byte array.
Definition: qbytearray.h:402
bool isEmpty() const
Returns true if the byte array has size 0; otherwise returns false.
Definition: qbytearray.h:421
#define UNIX_PATH_MAX
friend class QUnixSocketServerPrivate
int errno

◆ maxPendingConnections()

int QUnixSocketServer::maxPendingConnections ( ) const

Returns the maximum length the queue of pending connections may grow to.

That is, the maximum number of clients attempting to connect for which the Unix socket server has not yet accepted and passed to QUnixSocketServer::incomingConnection() . If a connection request arrives with the queue full, the client may receive a connection refused notification.

By default a queue length of 30 is used.

See also
QUnixSocketServer::setMaxPendingConnections()

Definition at line 330 of file qunixsocketserver.cpp.

331 {
332  if(!d)
333  return 30;
334 
335  return d->maxConns;
336 }
QUnixSocketServerPrivate * d

◆ operator=()

QUnixSocketServer& QUnixSocketServer::operator= ( const QUnixSocketServer )
private

◆ serverAddress()

QByteArray QUnixSocketServer::serverAddress ( ) const

Returns the Unix path on which this server is listening.

If this server is not listening, and empty address will be returned.

Definition at line 304 of file qunixsocketserver.cpp.

305 {
306  if(!d)
307  return QByteArray();
308  return d->address;
309 }
The QByteArray class provides an array of bytes.
Definition: qbytearray.h:135
QUnixSocketServerPrivate * d

◆ serverError()

QUnixSocketServer::ServerError QUnixSocketServer::serverError ( ) const

Returns the last server error.

Errors may only occur within a call to QUnixSocketServer::listen() , and only when such a call fails.

This method is not destructive, so multiple calls to QUnixSocketServer::serverError() will return the same value. The error is only reset by an explicit call to QUnixSocketServer::close() or by further calls to QUnixSocketServer::listen() .

Definition at line 199 of file qunixsocketserver.cpp.

200 {
201  if(!d)
202  return NoError;
203 
204  return d->error;
205 }
QUnixSocketServerPrivate * d
QUnixSocketServer::ServerError error

◆ setMaxPendingConnections()

void QUnixSocketServer::setMaxPendingConnections ( int  numConnections)

Sets the maximum length the queue of pending connections may grow to numConnections.

This value will only apply to QUnixSocketServer::listen() calls made following the value change - it will not be retroactively applied.

See also
QUnixSocketServer::maxPendingConnections()

Definition at line 346 of file qunixsocketserver.cpp.

347 {
348  Q_ASSERT(numConnections >= 1);
349  if(!d)
350  d = new QUnixSocketServerPrivate(this);
351 
352  d->maxConns = numConnections;
353 }
#define Q_ASSERT(cond)
Definition: qglobal.h:1823
QUnixSocketServerPrivate * d
friend class QUnixSocketServerPrivate

◆ socketDescriptor()

int QUnixSocketServer::socketDescriptor ( ) const

Definition at line 311 of file qunixsocketserver.cpp.

312 {
313  if (!d)
314  return -1;
315  return d->fd;
316 }
QUnixSocketServerPrivate * d

Friends and Related Functions

◆ QUnixSocketServerPrivate

Definition at line 91 of file qunixsocketserver_p.h.

Referenced by listen(), and setMaxPendingConnections().

Properties

◆ d

QUnixSocketServerPrivate* QUnixSocketServer::d
private

The documentation for this class was generated from the following files: