diff --git a/include/haproxy/sock.h b/include/haproxy/sock.h index 017e0ad1d..9aa014751 100644 --- a/include/haproxy/sock.h +++ b/include/haproxy/sock.h @@ -28,9 +28,11 @@ #include #include #include +#include #include -int sock_create_server_socket(struct connection *conn, struct proxy *be, int *stream_err); +int sock_create_server_socket(struct connection *conn, struct proxy *be, + enum proto_type proto_type, int sock_type, int *stream_err); void sock_enable(struct receiver *rx); void sock_disable(struct receiver *rx); void sock_unbind(struct receiver *rx); diff --git a/src/proto_quic.c b/src/proto_quic.c index c68cf33c2..210b25ac6 100644 --- a/src/proto_quic.c +++ b/src/proto_quic.c @@ -306,7 +306,7 @@ int quic_connect_server(struct connection *conn, int flags) } /* perform common checks on obtained socket FD, return appropriate Stream Error Flag in case of failure */ - fd = conn->handle.fd = sock_create_server_socket(conn, be, &stream_err); + fd = conn->handle.fd = sock_create_server_socket(conn, be, PROTO_TYPE_DGRAM, SOCK_DGRAM, &stream_err); if (fd == -1) return stream_err; diff --git a/src/proto_tcp.c b/src/proto_tcp.c index 51b9e9950..0de67c4eb 100644 --- a/src/proto_tcp.c +++ b/src/proto_tcp.c @@ -397,7 +397,7 @@ int tcp_connect_server(struct connection *conn, int flags) /* perform common checks on obtained socket FD, return appropriate Stream Error Flag in case of failure */ - fd = conn->handle.fd = sock_create_server_socket(conn, be, &stream_err); + fd = conn->handle.fd = sock_create_server_socket(conn, be, PROTO_TYPE_STREAM, SOCK_STREAM, &stream_err); if (fd == -1) return stream_err; diff --git a/src/proto_uxst.c b/src/proto_uxst.c index 8122ad384..434a702aa 100644 --- a/src/proto_uxst.c +++ b/src/proto_uxst.c @@ -330,7 +330,7 @@ static int uxst_connect_server(struct connection *conn, int flags) } /* perform common checks on obtained socket FD, return appropriate Stream Error Flag in case of failure */ - fd = conn->handle.fd = sock_create_server_socket(conn, be, &stream_err); + fd = conn->handle.fd = sock_create_server_socket(conn, be, PROTO_TYPE_STREAM, SOCK_STREAM, &stream_err); if (fd == -1) return stream_err; diff --git a/src/sock.c b/src/sock.c index 9d7892954..83db74595 100644 --- a/src/sock.c +++ b/src/sock.c @@ -265,7 +265,8 @@ static int sock_handle_system_err(struct connection *conn, struct proxy *be) * upper level is set as SF_ERR_NONE; -1 on failure, stream_err is set to * appropriate value. */ -int sock_create_server_socket(struct connection *conn, struct proxy *be, int *stream_err) +int sock_create_server_socket(struct connection *conn, struct proxy *be, + enum proto_type proto_type, int sock_type, int *stream_err) { const struct netns_entry *ns = NULL; const struct protocol *proto; @@ -279,9 +280,9 @@ int sock_create_server_socket(struct connection *conn, struct proxy *be, int *st ns = __objt_server(conn->target)->netns; } #endif - proto = protocol_lookup(conn->dst->ss_family, PROTO_TYPE_STREAM, conn->ctrl->sock_prot == IPPROTO_MPTCP); + proto = protocol_lookup(conn->dst->ss_family, proto_type , conn->ctrl->sock_prot == IPPROTO_MPTCP); BUG_ON(!proto); - sock_fd = my_socketat(ns, proto->fam->sock_domain, SOCK_STREAM, proto->sock_prot); + sock_fd = my_socketat(ns, proto->fam->sock_domain, sock_type, proto->sock_prot); /* at first, handle common to all proto families system limits and permission related errors */ if (sock_fd == -1) {