19#include <QtNetwork/private/qtnetworkglobal_p.h>
20#include "private/qcore_unix_p.h"
23#include <sys/socket.h>
24#include <netinet/in.h>
26#if defined(Q_OS_VXWORKS)
33#if defined(Q_OS_VXWORKS)
42#if !defined(QT_SOCKOPTLEN_T)
43# define QT_SOCKOPTLEN_T QT_SOCKLEN_T
46static inline int qt_safe_socket(
int domain,
int type,
int protocol,
int flags = 0)
48 Q_ASSERT((flags & ~O_NONBLOCK) == 0);
51#ifdef QT_THREADSAFE_CLOEXEC
52 int newtype = type | SOCK_CLOEXEC;
53 if (flags & O_NONBLOCK)
54 newtype |= SOCK_NONBLOCK;
55 fd = ::socket(domain, newtype, protocol);
58 fd = ::socket(domain, type, protocol);
62 ::fcntl(fd, F_SETFD, FD_CLOEXEC);
65 if (flags & O_NONBLOCK)
66 ::fcntl(fd, F_SETFL, ::fcntl(fd, F_GETFL) | O_NONBLOCK);
72static inline int qt_safe_accept(
int s,
struct sockaddr *addr, QT_SOCKLEN_T *addrlen,
int flags = 0)
74 Q_ASSERT((flags & ~O_NONBLOCK) == 0);
79 int sockflags = SOCK_CLOEXEC;
80 if (flags & O_NONBLOCK)
81 sockflags |= SOCK_NONBLOCK;
82# if defined(Q_OS_NETBSD)
83 fd = ::paccept(s, addr,
static_cast<QT_SOCKLEN_T *>(addrlen), NULL, sockflags);
85 fd = ::accept4(s, addr,
static_cast<QT_SOCKLEN_T *>(addrlen), sockflags);
89 fd = ::accept(s, addr,
static_cast<QT_SOCKLEN_T *>(addrlen));
93 ::fcntl(fd, F_SETFD, FD_CLOEXEC);
96 if (flags & O_NONBLOCK)
97 ::fcntl(fd, F_SETFL, ::fcntl(fd, F_GETFL) | O_NONBLOCK);
105 return ::listen(s, backlog);
108static inline int qt_safe_connect(
int sockfd,
const struct sockaddr *addr, QT_SOCKLEN_T addrlen)
112 QT_EINTR_LOOP(ret, QT_SOCKET_CONNECT(sockfd,
const_cast<
struct sockaddr *>(addr), addrlen));
120#undef QT_SOCKET_CONNECT
121#define QT_SOCKET_CONNECT qt_safe_connect
136 return ::ioctl(sockfd, request, arg);
142 flags |= MSG_NOSIGNAL;
148 QT_EINTR_LOOP(ret, ::sendmsg(sockfd, msg, flags));
156 QT_EINTR_LOOP(ret, ::recvmsg(sockfd, msg, flags));
Combined button and popup list for selecting options.
static int qt_safe_ioctl(int sockfd, unsigned long request, T arg)
static int qt_safe_listen(int s, int backlog)
static int qt_safe_sendmsg(int sockfd, const struct msghdr *msg, int flags)
static int qt_safe_socket(int domain, int type, int protocol, int flags=0)
static int qt_safe_accept(int s, struct sockaddr *addr, QT_SOCKLEN_T *addrlen, int flags=0)
static int qt_safe_recvmsg(int sockfd, struct msghdr *msg, int flags)
static int qt_safe_connect(int sockfd, const struct sockaddr *addr, QT_SOCKLEN_T addrlen)