MINOR: tools: introduce new option PA_O_DEFAULT_DGRAM on str2sa_range.

str2sa_range function options PA_O_DGRAM and PA_O_STREAM are used to
define the supported address types but also to set the default type
if it is not explicit. If the used address support both STREAM and DGRAM,
the default was always set to STREAM.

This patch introduce a new option PA_O_DEFAULT_DGRAM to force the
default to DGRAM type if it is not explicit in the address field
and both STREAM and DGRAM are supported. If only DGRAM or only STREAM
is supported, it continues to be considered as the default.
This commit is contained in:
Emeric Brun 2021-03-22 17:17:34 +01:00 committed by Willy Tarreau
parent 8cc586c73f
commit 69ba35146f
2 changed files with 6 additions and 3 deletions

View File

@ -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

View File

@ -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;