diff -r b72c6db6890b -r 5dc02b23752f src/network/socket/qnativesocketengine_unix.cpp --- a/src/network/socket/qnativesocketengine_unix.cpp Wed Jun 23 19:07:03 2010 +0300 +++ b/src/network/socket/qnativesocketengine_unix.cpp Tue Jul 06 15:10:48 2010 +0300 @@ -44,8 +44,8 @@ #include "private/qnet_unix_p.h" #include "qiodevice.h" #include "qhostaddress.h" +#include "qelapsedtimer.h" #include "qvarlengtharray.h" -#include "qdatetime.h" #include #include #include @@ -851,7 +851,11 @@ // Symbian does not support signals natively and Open C returns EINTR when moving to offline writtenBytes = ::write(socketDescriptor, data, len); #else - writtenBytes = qt_safe_write(socketDescriptor, data, len); + // loop while ::write() returns -1 and errno == EINTR, in case + // of an interrupting signal. + do { + writtenBytes = qt_safe_write(socketDescriptor, data, len); + } while (writtenBytes < 0 && errno == EINTR); #endif if (writtenBytes < 0) { @@ -895,7 +899,9 @@ #ifdef Q_OS_SYMBIAN r = ::read(socketDescriptor, data, maxSize); #else - r = qt_safe_read(socketDescriptor, data, maxSize); + do { + r = qt_safe_read(socketDescriptor, data, maxSize); + } while (r == -1 && errno == EINTR); #endif if (r < 0) { @@ -1011,7 +1017,7 @@ #ifndef Q_OS_SYMBIAN ret = qt_safe_select(socketDescriptor + 1, &fdread, &fdwrite, 0, timeout < 0 ? 0 : &tv); #else - QTime timer; + QElapsedTimer timer; timer.start(); do {