summaryrefslogtreecommitdiff
path: root/lib/isc/unix/socket.c
diff options
context:
space:
mode:
authorXin LI <delphij@FreeBSD.org>2015-04-08 17:52:54 +0000
committerXin LI <delphij@FreeBSD.org>2015-04-08 17:52:54 +0000
commit7ba7a5de74780dee4ec54bace1ec36427be1d8b8 (patch)
treea5a1890b0b884a1d303e90c4130c3b731772abd5 /lib/isc/unix/socket.c
parenta2bc50f814b6966b412ba90221460066a8b31951 (diff)
Notes
Diffstat (limited to 'lib/isc/unix/socket.c')
-rw-r--r--lib/isc/unix/socket.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/lib/isc/unix/socket.c b/lib/isc/unix/socket.c
index 2a004234d429..110eafe50fd1 100644
--- a/lib/isc/unix/socket.c
+++ b/lib/isc/unix/socket.c
@@ -1763,7 +1763,7 @@ doio_recv(isc__socket_t *sock, isc_socketevent_t *dev) {
}
/*
* Simulate a firewall blocking UDP responses bigger than
- * 512 bytes.
+ * 'maxudp' bytes.
*/
if (sock->manager->maxudp != 0 && cc > sock->manager->maxudp)
return (DOIO_SOFT);
@@ -1857,7 +1857,12 @@ doio_send(isc__socket_t *sock, isc_socketevent_t *dev) {
build_msghdr_send(sock, dev, &msghdr, iov, &write_count);
resend:
- cc = sendmsg(sock->fd, &msghdr, 0);
+ if (sock->type == isc_sockettype_udp &&
+ sock->manager->maxudp != 0 &&
+ write_count > (size_t)sock->manager->maxudp)
+ cc = write_count;
+ else
+ cc = sendmsg(sock->fd, &msghdr, 0);
send_errno = errno;
/*