From e1d4c16aef954fe75fdfaf3156e78c3d62d9febd Mon Sep 17 00:00:00 2001 From: Alex Trotsenko Date: Wed, 21 Oct 2015 19:52:05 +0300 Subject: QNativeSocketEngine: allocate more space for the ancillary data As a corner case on BSD systems, we use IP_RECVIF control message to retrieve an interface index of the received datagram. Take care about sockaddr_dl structure, while calculating a size of the ancillary data buffer. Change-Id: I1c113d390a4929489c4c5858847b6262f1baa204 Reviewed-by: Thiago Macieira --- src/network/socket/qnativesocketengine_unix.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src/network/socket/qnativesocketengine_unix.cpp') diff --git a/src/network/socket/qnativesocketengine_unix.cpp b/src/network/socket/qnativesocketengine_unix.cpp index c40eef769e..f1845f31f3 100644 --- a/src/network/socket/qnativesocketengine_unix.cpp +++ b/src/network/socket/qnativesocketengine_unix.cpp @@ -828,7 +828,11 @@ qint64 QNativeSocketEnginePrivate::nativeReceiveDatagram(char *data, qint64 maxS QAbstractSocketEngine::PacketHeaderOptions options) { // we use quintptr to force the alignment - quintptr cbuf[(CMSG_SPACE(sizeof(struct in6_pktinfo)) + CMSG_SPACE(sizeof(int)) + sizeof(quintptr) - 1) / sizeof(quintptr)]; + quintptr cbuf[(CMSG_SPACE(sizeof(struct in6_pktinfo)) + CMSG_SPACE(sizeof(int)) +#if !defined(IP_PKTINFO) && defined(IP_RECVIF) && defined(Q_OS_BSD4) + + CMSG_SPACE(sizeof(sockaddr_dl)) +#endif + + sizeof(quintptr) - 1) / sizeof(quintptr)]; struct msghdr msg; struct iovec vec; -- cgit v1.2.3