$OpenBSD: patch-qtbase_src_network_socket_qnativesocketengine_unix_cpp,v 1.3 2016/02/22 20:38:08 zhuk Exp $
1. Fix for cases of >1024 open files: https://bugreports.qt.io/browse/QTBUG-51274
2. Unbreak compilation (EPROTO).
--- qtbase/src/network/socket/qnativesocketengine_unix.cpp.ports.orig	Tue Feb 17 07:56:38 2015
+++ qtbase/src/network/socket/qnativesocketengine_unix.cpp	Sun Feb 21 23:42:16 2016
@@ -42,6 +42,7 @@
 #include <time.h>
 #include <errno.h>
 #include <fcntl.h>
+#include <poll.h>
 #ifndef QT_NO_IPV6IFNAME
 #include <net/if.h>
 #endif
@@ -622,7 +623,9 @@ int QNativeSocketEnginePrivate::nativeAccept()
             setError(QAbstractSocket::SocketResourceError, NotSocketErrorString);
             break;
         case EPROTONOSUPPORT:
+#ifdef EPROTO
         case EPROTO:
+#endif
         case EAFNOSUPPORT:
         case EINVAL:
             setError(QAbstractSocket::UnsupportedSocketOperationError, ProtocolUnsupportedErrorString);
@@ -1192,48 +1195,31 @@ int QNativeSocketEnginePrivate::nativeSelect(int timeo
 
 int QNativeSocketEnginePrivate::nativeSelect(int timeout, bool selectForRead) const
 {
-    fd_set fds;
-    FD_ZERO(&fds);
-    FD_SET(socketDescriptor, &fds);
+    struct pollfd pd;
 
-    struct timespec tv;
-    tv.tv_sec = timeout / 1000;
-    tv.tv_nsec = (timeout % 1000) * 1000 * 1000;
-
-    int retval;
-    if (selectForRead)
-        retval = qt_safe_select(socketDescriptor + 1, &fds, 0, 0, timeout < 0 ? 0 : &tv);
-    else
-        retval = qt_safe_select(socketDescriptor + 1, 0, &fds, 0, timeout < 0 ? 0 : &tv);
-
-    return retval;
+    memset(&pd, 0, sizeof(struct pollfd));
+    pd.fd = socketDescriptor;
+    pd.events = selectForRead ? POLLIN : POLLOUT;
+    return poll(&pd, 1, timeout);
 }
 
 int QNativeSocketEnginePrivate::nativeSelect(int timeout, bool checkRead, bool checkWrite,
                        bool *selectForRead, bool *selectForWrite) const
 {
-    fd_set fdread;
-    FD_ZERO(&fdread);
-    if (checkRead)
-        FD_SET(socketDescriptor, &fdread);
-
-    fd_set fdwrite;
-    FD_ZERO(&fdwrite);
-    if (checkWrite)
-        FD_SET(socketDescriptor, &fdwrite);
-
-    struct timespec tv;
-    tv.tv_sec = timeout / 1000;
-    tv.tv_nsec = (timeout % 1000) * 1000 * 1000;
-
+    struct pollfd pd;
     int ret;
-    ret = qt_safe_select(socketDescriptor + 1, &fdread, &fdwrite, 0, timeout < 0 ? 0 : &tv);
 
-    if (ret <= 0)
-        return ret;
-    *selectForRead = FD_ISSET(socketDescriptor, &fdread);
-    *selectForWrite = FD_ISSET(socketDescriptor, &fdwrite);
-
+    memset(&pd, 0, sizeof(struct pollfd));
+    pd.fd = socketDescriptor;
+    if (checkRead)
+        pd.events |= POLLIN;
+    if (checkWrite)
+        pd.events |= POLLOUT;
+    ret = poll(&pd, 1, timeout);
+    if (ret > 0) {
+        *selectForRead = ((pd.events & POLLIN) == POLLIN);   
+        *selectForWrite = ((pd.events & POLLOUT) == POLLOUT);   
+    }
     return ret;
 }
 #endif // Q_OS_BLACKBERRY
