if (!conn || !conn_ctrl_ready(conn) || (conn->flags & CO_FL_FDLESS))
return;
- sock_set_mark(conn->handle.fd, mark);
+ sock_set_mark(conn->handle.fd, conn->ctrl->fam->sock_family, mark);
}
/* Sets adjust the TCP quick-ack feature on the connection's socket. The
}
/* Sets mark sockopt on socket */
-static inline void sock_set_mark(int fd, int mark)
+static inline void sock_set_mark(int fd, sa_family_t sock_family, int mark)
{
+ if ((sock_family == AF_INET) || (sock_family == AF_INET6)) {
#if defined(SO_MARK)
- setsockopt(fd, SOL_SOCKET, SO_MARK, &mark, sizeof(mark));
+ setsockopt(fd, SOL_SOCKET, SO_MARK, &mark, sizeof(mark));
+/* FreeBSD */
#elif defined(SO_USER_COOKIE)
- setsockopt(fd, SOL_SOCKET, SO_USER_COOKIE, &mark, sizeof(mark));
+ setsockopt(fd, SOL_SOCKET, SO_USER_COOKIE, &mark, sizeof(mark));
+/* OpenBSD */
#elif defined(SO_RTABLE)
- setsockopt(fd, SOL_SOCKET, SO_RTABLE, &mark, sizeof(mark));
+ setsockopt(fd, SOL_SOCKET, SO_RTABLE, &mark, sizeof(mark));
#endif
+ }
}
#endif /* _HAPROXY_SOCK_H */
if (sock_fd == -1)
goto end;
if (conn->flags & CO_FL_OPT_MARK)
- sock_set_mark(sock_fd, conn->mark);
+ sock_set_mark(sock_fd, conn->ctrl->fam->sock_family, conn->mark);
if (conn->flags & CO_FL_OPT_TOS)
sock_set_tos(sock_fd, conn->dst, conn->tos);