Qt 4.8
Public Types | Public Slots | Signals | Public Functions | Protected Functions | Properties | List of all members
QSocketNotifier Class Reference

The QSocketNotifier class provides support for monitoring activity on a file descriptor. More...

#include <qsocketnotifier.h>

Inheritance diagram for QSocketNotifier:
QObject QExceptionNotifier QReadNotifier QWriteNotifier

Public Types

enum  Type { Read, Write, Exception }
 This enum describes the various types of events that a socket notifier can recognize. More...
 

Public Slots

void setEnabled (bool)
 If enable is true, the notifier is enabled; otherwise the notifier is disabled. More...
 
- Public Slots inherited from QObject
void deleteLater ()
 Schedules this object for deletion. More...
 

Signals

void activated (int socket)
 This signal is emitted whenever the socket notifier is enabled and a socket event corresponding to its Type{type} occurs. 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...
 

Public Functions

bool isEnabled () const
 Returns true if the notifier is enabled; otherwise returns false. More...
 
 QSocketNotifier (int socket, Type, QObject *parent=0)
 Constructs a socket notifier with the given parent. More...
 
int socket () const
 Returns the socket identifier specified to the constructor. More...
 
Type type () const
 Returns the socket event type specified to the constructor. More...
 
 ~QSocketNotifier ()
 Destroys this socket notifier. 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 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

bool event (QEvent *)
 This virtual function receives events to an object and should return true if the event e was recognized and processed. 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...
 

Properties

bool snenabled
 
Type sntype
 
int sockfd
 

Additional Inherited Members

- 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 QSocketNotifier class provides support for monitoring activity on a file descriptor.

The QSocketNotifier makes it possible to integrate Qt's event loop with other event loops based on file descriptors. For example, the CORBA Framework uses it to process CORBA events. File descriptor action is detected in Qt's main event loop (QCoreApplication::exec()).

Once you have opened a device using a low-level (usually platform-specific) API, you can create a socket notifier to monitor the file descriptor. The socket notifier is enabled by default, i.e. it emits the activated() signal whenever a socket event corresponding to its type occurs. Connect the activated() signal to the slot you want to be called when an event corresponding to your socket notifier's type occurs.

There are three types of socket notifiers: read, write, and exception. The type is described by the Type enum, and must be specified when constructing the socket notifier. After construction it can be determined using the type() function. Note that if you need to monitor both reads and writes for the same file descriptor, you must create two socket notifiers. Note also that it is not possible to install two socket notifiers of the same type (Read , Write , Exception ) on the same socket.

The setEnabled() function allows you to disable as well as enable the socket notifier. It is generally advisable to explicitly enable or disable the socket notifier, especially for write notifiers. A disabled notifier ignores socket events (the same effect as not creating the socket notifier). Use the isEnabled() function to determine the notifier's current status.

Finally, you can use the socket() function to retrieve the socket identifier. Although the class is called QSocketNotifier, it is normally used for other types of devices than sockets. QTcpSocket and QUdpSocket provide notification through signals, so there is normally no need to use a QSocketNotifier on them.

Notes for Windows Users

The socket passed to QSocketNotifier will become non-blocking, even if it was created as a blocking socket. The activated() signal is sometimes triggered by high general activity on the host, even if there is nothing to read. A subsequent read from the socket can then fail, the error indicating that there is no data available (e.g., WSAEWOULDBLOCK). This is an operating system limitation, and not a bug in QSocketNotifier.

To ensure that the socket notifier handles read notifications correctly, follow these steps when you receive a notification:

  1. Disable the notifier.
  2. Read data from the socket.
  3. Re-enable the notifier if you are interested in more data (such as after having written a new command to a remote server).

To ensure that the socket notifier handles write notifications correctly, follow these steps when you receive a notification:

  1. Disable the notifier.
  2. Write as much data as you can (before EWOULDBLOCK is returned).
  3. Re-enable notifier if you have more data to write.

Further information: On Windows, Qt always disables the notifier after getting a notification, and only re-enables it if more data is expected. For example, if data is read from the socket and it can be used to read more, or if reading or writing is not possible because the socket would block, in which case it is necessary to wait before attempting to read or write again.

See also
QFile, QProcess, QTcpSocket, QUdpSocket

Definition at line 53 of file qsocketnotifier.h.

Enumerations

◆ Type

This enum describes the various types of events that a socket notifier can recognize.

The type must be specified when constructing the socket notifier.

Note that if you need to monitor both reads and writes for the same file descriptor, you must create two socket notifiers. Note also that it is not possible to install two socket notifiers of the same type (Read, Write, Exception) on the same socket.

  • Read There is data to be read.
  • Write Data can be written.
  • Exception An exception has occurred. We recommend against using this.
See also
QSocketNotifier(), type()
Enumerator
Read 
Write 
Exception 

Definition at line 59 of file qsocketnotifier.h.

Constructors and Destructors

◆ QSocketNotifier()

QSocketNotifier::QSocketNotifier ( int  socket,
Type  type,
QObject parent = 0 
)

Constructs a socket notifier with the given parent.

It enables the socket, and watches for events of the given type.

It is generally advisable to explicitly enable or disable the socket notifier, especially for write notifiers.

Note for Windows users: The socket passed to QSocketNotifier will become non-blocking, even if it was created as a blocking socket.

See also
setEnabled(), isEnabled()

Definition at line 177 of file qsocketnotifier.cpp.

178  : QObject(parent)
179 {
180  sockfd = socket;
181  sntype = type;
182  snenabled = true;
183 
184  Q_D(QObject);
185  if (socket < 0)
186  qWarning("QSocketNotifier: Invalid socket specified");
187  else if (!d->threadData->eventDispatcher)
188  qWarning("QSocketNotifier: Can only be used with threads started with QThread");
189  else
190  d->threadData->eventDispatcher->registerSocketNotifier(this);
191 }
double d
Definition: qnumeric_p.h:62
The QObject class is the base class of all Qt objects.
Definition: qobject.h:111
#define Q_D(Class)
Definition: qglobal.h:2482
Type type() const
Returns the socket event type specified to the constructor.
Q_CORE_EXPORT void qWarning(const char *,...)
Q_INVOKABLE QObject(QObject *parent=0)
Constructs an object with parent object parent.
Definition: qobject.cpp:753
int socket() const
Returns the socket identifier specified to the constructor.

◆ ~QSocketNotifier()

QSocketNotifier::~QSocketNotifier ( )

Destroys this socket notifier.

Definition at line 231 of file qsocketnotifier.cpp.

232 {
233  setEnabled(false);
234 }
void setEnabled(bool)
If enable is true, the notifier is enabled; otherwise the notifier is disabled.

Functions

◆ activated

void QSocketNotifier::activated ( int  socket)
signal

This signal is emitted whenever the socket notifier is enabled and a socket event corresponding to its Type{type} occurs.

The socket identifier is passed in the socket parameter.

See also
type(), socket()

Referenced by event().

◆ event()

bool QSocketNotifier::event ( QEvent e)
protectedvirtual

This virtual function receives events to an object and should return true if the event e was recognized and processed.

The event() function can be reimplemented to customize the behavior of an object.

See also
installEventFilter(), timerEvent(), QApplication::sendEvent(), QApplication::postEvent(), QWidget::event()

Reimplemented from QObject.

Reimplemented in QExceptionNotifier, QWriteNotifier, and QReadNotifier.

Definition at line 321 of file qsocketnotifier.cpp.

Referenced by QReadNotifier::event(), QWriteNotifier::event(), and QExceptionNotifier::event().

322 {
323  // Emits the activated() signal when a QEvent::SockAct is
324  // received.
325  if (e->type() == QEvent::ThreadChange) {
326  if (snenabled) {
328  Q_ARG(bool, snenabled));
329  setEnabled(false);
330  }
331  }
332  QObject::event(e); // will activate filters
333  if (e->type() == QEvent::SockAct) {
335  return true;
336  }
337  return false;
338 }
#define Q_ARG(type, data)
Definition: qobjectdefs.h:246
void activated(int socket)
This signal is emitted whenever the socket notifier is enabled and a socket event corresponding to it...
virtual bool event(QEvent *)
This virtual function receives events to an object and should return true if the event e was recogniz...
Definition: qobject.cpp:1200
#define emit
Definition: qobjectdefs.h:76
void setEnabled(bool)
If enable is true, the notifier is enabled; otherwise the notifier is disabled.
static bool invokeMethod(QObject *obj, const char *member, Qt::ConnectionType, QGenericReturnArgument ret, QGenericArgument val0=QGenericArgument(0), QGenericArgument val1=QGenericArgument(), QGenericArgument val2=QGenericArgument(), QGenericArgument val3=QGenericArgument(), QGenericArgument val4=QGenericArgument(), QGenericArgument val5=QGenericArgument(), QGenericArgument val6=QGenericArgument(), QGenericArgument val7=QGenericArgument(), QGenericArgument val8=QGenericArgument(), QGenericArgument val9=QGenericArgument())
Invokes the member (a signal or a slot name) on the object obj.
Type type() const
Returns the event type.
Definition: qcoreevent.h:303

◆ isEnabled()

bool QSocketNotifier::isEnabled ( ) const
inline

Returns true if the notifier is enabled; otherwise returns false.

See also
setEnabled()

Definition at line 70 of file qsocketnotifier.h.

Referenced by QDirectFBMouseHandlerPrivate::setEnabled().

70 { return snenabled; }

◆ setEnabled

void QSocketNotifier::setEnabled ( bool  enable)
slot

◆ socket()

int QSocketNotifier::socket ( ) const
inline

◆ type()

Type QSocketNotifier::type ( ) const
inline

Properties

◆ snenabled

bool QSocketNotifier::snenabled
private

Definition at line 86 of file qsocketnotifier.h.

Referenced by event(), QSocketNotifier(), and setEnabled().

◆ sntype

Type QSocketNotifier::sntype
private

Definition at line 85 of file qsocketnotifier.h.

Referenced by QSocketNotifier().

◆ sockfd

int QSocketNotifier::sockfd
private

Definition at line 84 of file qsocketnotifier.h.

Referenced by event(), QSocketNotifier(), and setEnabled().


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