summaryrefslogtreecommitdiffstats
path: root/src/network/socket/qnativesocketengine_unix.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/network/socket/qnativesocketengine_unix.cpp')
-rw-r--r--src/network/socket/qnativesocketengine_unix.cpp24
1 files changed, 23 insertions, 1 deletions
diff --git a/src/network/socket/qnativesocketengine_unix.cpp b/src/network/socket/qnativesocketengine_unix.cpp
index 430197ccc6e..e920de11c13 100644
--- a/src/network/socket/qnativesocketengine_unix.cpp
+++ b/src/network/socket/qnativesocketengine_unix.cpp
@@ -170,6 +170,26 @@ static void convertToLevelAndOption(QNativeSocketEngine::SocketOption opt,
#endif
}
break;
+ case QNativeSocketEngine::KeepAliveIdleOption:
+ level = IPPROTO_TCP;
+#ifdef TCP_KEEPALIVE
+ n = TCP_KEEPALIVE;
+#else
+ n = TCP_KEEPIDLE;
+#endif
+ break;
+ case QNativeSocketEngine::KeepAliveIntervalOption:
+#ifdef TCP_KEEPINTVL
+ level = IPPROTO_TCP;
+ n = TCP_KEEPINTVL;
+#endif
+ break;
+ case QNativeSocketEngine::KeepAliveCountOption:
+#ifdef TCP_KEEPCNT
+ level = IPPROTO_TCP;
+ n = TCP_KEEPCNT;
+#endif
+ break;
}
}
@@ -200,7 +220,7 @@ bool QNativeSocketEnginePrivate::createNewSocket(QAbstractSocket::SocketType soc
int type = (socketType == QAbstractSocket::UdpSocket) ? SOCK_DGRAM : SOCK_STREAM;
int socket = qt_safe_socket(domain, type, protocol, O_NONBLOCK);
- if (socket < 0 && socketProtocol == QAbstractSocket::AnyIPProtocol && errno == EAFNOSUPPORT) {
+ if (socket < 0 && socketProtocol == QAbstractSocket::AnyIPProtocol && (errno == EAFNOSUPPORT || errno == ENOTSUP )) {
domain = AF_INET;
socket = qt_safe_socket(domain, type, protocol, O_NONBLOCK);
socketProtocol = QAbstractSocket::IPv4Protocol;
@@ -1161,6 +1181,8 @@ qint64 QNativeSocketEnginePrivate::nativeSendDatagram(const char *data, qint64 l
sentBytes = -2;
break;
case EMSGSIZE:
+ // seen on VxWorks
+ case ENOMEM:
setError(QAbstractSocket::DatagramTooLargeError, DatagramTooLargeErrorString);
break;
case ECONNRESET: