diff --git a/include/haproxy/tools-t.h b/include/haproxy/tools-t.h index 488b90d86..805ade6a3 100644 --- a/include/haproxy/tools-t.h +++ b/include/haproxy/tools-t.h @@ -95,10 +95,11 @@ #define PA_O_PORT_OFS 0x00000010 /* port offsets are supported */ #define PA_O_SOCKET_FD 0x00000020 /* inherited socket FDs are supported */ #define PA_O_RAW_FD 0x00000040 /* inherited raw FDs are supported (pipes, ttys, ...) */ -#define PA_O_DGRAM 0x00000080 /* the address will be used for a datagram socket (in or out) */ -#define PA_O_STREAM 0x00000100 /* the address will be used for streams (in or out) */ +#define PA_O_DGRAM 0x00000080 /* the address can be used for a datagram socket (in or out) */ +#define PA_O_STREAM 0x00000100 /* the address can be used for streams (in or out) */ #define PA_O_XPRT 0x00000200 /* transport protocols may be specified */ #define PA_O_CONNECT 0x00000400 /* the protocol must have a ->connect method */ +#define PA_O_DEFAULT_DGRAM 0x00000800 /* by default, this address will be used for a datagram socket */ /* UTF-8 decoder status */ #define UTF8_CODE_OK 0x00 diff --git a/src/tools.c b/src/tools.c index f39ec1efc..3f3460d3e 100644 --- a/src/tools.c +++ b/src/tools.c @@ -910,7 +910,9 @@ struct sockaddr_storage *str2sa_range(const char *str, int *port, int *low, int memset(&ss, 0, sizeof(ss)); /* prepare the default socket types */ - if ((opts & (PA_O_STREAM|PA_O_DGRAM)) == PA_O_DGRAM) + if (((opts & (PA_O_STREAM|PA_O_DGRAM)) == PA_O_DGRAM)) + || (((opts & (PA_O_STREAM|PA_O_DGRAM)) == (PA_O_DGRAM|PA_O_STREAM)) + && (opts & PA_O_DEFAULT_DGRAM)) sock_type = ctrl_type = SOCK_DGRAM; else sock_type = ctrl_type = SOCK_STREAM;