diff options
author | Aleksandar Sasha Babic <aleksandar.babic@nokia.com> | 2009-10-02 10:00:11 (GMT) |
---|---|---|
committer | Aleksandar Sasha Babic <aleksandar.babic@nokia.com> | 2009-10-02 10:07:53 (GMT) |
commit | b0b8d8f7a65e31c0edabe7fbe6ee91bb62a67d7c (patch) | |
tree | 003ee8c075ecc41fb60c6fbf52e0867aa653993b /src/network | |
parent | d119d83503ade36a450c0326d94764dc9da18dab (diff) | |
download | Qt-b0b8d8f7a65e31c0edabe7fbe6ee91bb62a67d7c.zip Qt-b0b8d8f7a65e31c0edabe7fbe6ee91bb62a67d7c.tar.gz Qt-b0b8d8f7a65e31c0edabe7fbe6ee91bb62a67d7c.tar.bz2 |
Dealing with socket that was signalized on exception fds set
It turns out that if socket was signalized via exception fds
set, we should signalize only write notifier in the case where
both read and write notifiers exist.
If in this case we send signal to read notification socket will
prematurely be closed.
x#Reviewed-by: Janne Antilla
Diffstat (limited to 'src/network')
-rw-r--r-- | src/network/socket/qnativesocketengine_unix.cpp | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/src/network/socket/qnativesocketengine_unix.cpp b/src/network/socket/qnativesocketengine_unix.cpp index 2bf9858..f890d12 100644 --- a/src/network/socket/qnativesocketengine_unix.cpp +++ b/src/network/socket/qnativesocketengine_unix.cpp @@ -1018,10 +1018,12 @@ int QNativeSocketEnginePrivate::nativeSelect(int timeout, bool checkRead, bool c if(selectForExec) { qWarning("nativeSelect (checkRead %d, checkWrite %d, ret %d, errno %d): Unexpected expectfds ready in fd %d", checkRead, checkWrite, ret, errno, socketDescriptor); - if (checkRead) - FD_SET(socketDescriptor, &fdread); - if (checkWrite) + if (checkWrite){ + FD_CLR(socketDescriptor, &fdread); FD_SET(socketDescriptor, &fdwrite); + } else if (checkRead) + FD_SET(socketDescriptor, &fdread); + if ((ret == -1) && ( errno == ECONNREFUSED || errno == EPIPE )) ret = 1; |