* Disables Nagle's algorithm on a TCP socket (sets TCP_NODELAY).
*/
+isc_result_t
+isc__nm_socket_min_mtu(uv_os_sock_t fd, sa_family_t sa_family);
+/*%<
+ * Use minimum MTU on IPv6 sockets
+ */
+
void
isc__nm_set_network_buffers(isc_nm_t *nm, uv_handle_t *handle);
/*%>
#endif
}
+isc_result_t
+isc__nm_socket_min_mtu(uv_os_sock_t fd, sa_family_t sa_family) {
+ if (sa_family != AF_INET6) {
+ return (ISC_R_SUCCESS);
+ }
+#ifdef IPV6_USE_MIN_MTU
+ if (setsockopt_on(fd, IPPROTO_IPV6, IPV6_USE_MIN_MTU) == -1) {
+ return (ISC_R_FAILURE);
+ }
+#elif defined(IPV6_MTU)
+ if (setsockopt(fd, IPPROTO_IPV6, IPV6_MTU, &(int){ 1280 },
+ sizeof(int)) == -1) {
+ return (ISC_R_FAILURE);
+ }
+#else
+ UNUSED(fd);
+#endif
+
+ return (ISC_R_SUCCESS);
+}
+
void
isc__nm_set_network_buffers(isc_nm_t *nm, uv_handle_t *handle) {
int32_t recv_buffer_size = 0;
return;
}
+ (void)isc__nm_socket_min_mtu(sock->fd, sa_family);
+
ievent = isc__nm_get_netievent_tcpconnect(mgr, sock, req);
if (isc__nm_in_netthread()) {
REQUIRE(sock->parent != NULL);
REQUIRE(sock->tid == isc_nm_tid());
- /* TODO: set min mss */
+ (void)isc__nm_socket_min_mtu(sock->fd, sa_family);
r = uv_tcp_init(&worker->loop, &sock->uv_handle.tcp);
UV_RUNTIME_CHECK(uv_tcp_init, r);
return;
}
+ (void)isc__nm_socket_min_mtu(sock->fd, sa_family);
+
/* 2 minute timeout */
result = isc__nm_socket_connectiontimeout(sock->fd, 120 * 1000);
RUNTIME_CHECK(result == ISC_R_SUCCESS);
REQUIRE(sock->parent != NULL);
REQUIRE(sock->tid == isc_nm_tid());
- /* TODO: set min mss */
+ (void)isc__nm_socket_min_mtu(sock->fd, sa_family);
r = uv_tcp_init(&worker->loop, &sock->uv_handle.tcp);
UV_RUNTIME_CHECK(uv_tcp_init, r);
goto failure;
}
+ (void)isc__nm_socket_min_mtu(sock->fd, sa_family);
+
/* 2 minute timeout */
result = isc__nm_socket_connectiontimeout(sock->fd, 120 * 1000);
RUNTIME_CHECK(result == ISC_R_SUCCESS);
REQUIRE(sock->parent != NULL);
REQUIRE(sock->tid == isc_nm_tid());
- /* TODO: set min mss */
+ (void)isc__nm_socket_min_mtu(sock->fd, sa_family);
r = uv_tcp_init(&worker->loop, &sock->uv_handle.tcp);
UV_RUNTIME_CHECK(uv_tcp_init, r);
REQUIRE(sock->parent != NULL);
REQUIRE(sock->tid == isc_nm_tid());
+ (void)isc__nm_socket_min_mtu(sock->fd, sa_family);
+
#if HAVE_DECL_UV_UDP_RECVMMSG
uv_init_flags |= UV_UDP_RECVMMSG;
#endif
(void)isc__nm_socket_disable_pmtud(sock->fd, sa_family);
+ (void)isc__nm_socket_min_mtu(sock->fd, sa_family);
+
event = isc__nm_get_netievent_udpconnect(mgr, sock, req);
if (isc__nm_in_netthread()) {