diff options
Diffstat (limited to 'regress/netcat.c')
-rw-r--r-- | regress/netcat.c | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/regress/netcat.c b/regress/netcat.c index fe94dd908..50934f3f2 100644 --- a/regress/netcat.c +++ b/regress/netcat.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: netcat.c,v 1.126 2014/10/30 16:08:31 tedu Exp $ */ | 1 | /* $OpenBSD: netcat.c,v 1.127 2015/02/14 22:40:22 jca Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2001 Eric Jackson <ericj@monkey.org> | 3 | * Copyright (c) 2001 Eric Jackson <ericj@monkey.org> |
4 | * | 4 | * |
@@ -133,7 +133,7 @@ int udptest(int); | |||
133 | int unix_bind(char *); | 133 | int unix_bind(char *); |
134 | int unix_connect(char *); | 134 | int unix_connect(char *); |
135 | int unix_listen(char *); | 135 | int unix_listen(char *); |
136 | void set_common_sockopts(int); | 136 | void set_common_sockopts(int, int); |
137 | int map_tos(char *, int *); | 137 | int map_tos(char *, int *); |
138 | void report_connect(const struct sockaddr *, socklen_t); | 138 | void report_connect(const struct sockaddr *, socklen_t); |
139 | void usage(int); | 139 | void usage(int); |
@@ -648,7 +648,7 @@ remote_connect(const char *host, const char *port, struct addrinfo hints) | |||
648 | freeaddrinfo(ares); | 648 | freeaddrinfo(ares); |
649 | } | 649 | } |
650 | 650 | ||
651 | set_common_sockopts(s); | 651 | set_common_sockopts(s, res0->ai_family); |
652 | 652 | ||
653 | if (timeout_connect(s, res0->ai_addr, res0->ai_addrlen) == 0) | 653 | if (timeout_connect(s, res0->ai_addr, res0->ai_addrlen) == 0) |
654 | break; | 654 | break; |
@@ -748,7 +748,7 @@ local_listen(char *host, char *port, struct addrinfo hints) | |||
748 | if (ret == -1) | 748 | if (ret == -1) |
749 | err(1, "setsockopt SO_REUSEADDR"); | 749 | err(1, "setsockopt SO_REUSEADDR"); |
750 | #endif | 750 | #endif |
751 | set_common_sockopts(s); | 751 | set_common_sockopts(s, res0->ai_family); |
752 | 752 | ||
753 | if (bind(s, (struct sockaddr *)res0->ai_addr, | 753 | if (bind(s, (struct sockaddr *)res0->ai_addr, |
754 | res0->ai_addrlen) == 0) | 754 | res0->ai_addrlen) == 0) |
@@ -1168,7 +1168,7 @@ udptest(int s) | |||
1168 | } | 1168 | } |
1169 | 1169 | ||
1170 | void | 1170 | void |
1171 | set_common_sockopts(int s) | 1171 | set_common_sockopts(int s, int af) |
1172 | { | 1172 | { |
1173 | int x = 1; | 1173 | int x = 1; |
1174 | 1174 | ||
@@ -1186,8 +1186,17 @@ set_common_sockopts(int s) | |||
1186 | } | 1186 | } |
1187 | #ifdef IP_TOS | 1187 | #ifdef IP_TOS |
1188 | if (Tflag != -1) { | 1188 | if (Tflag != -1) { |
1189 | if (setsockopt(s, IPPROTO_IP, IP_TOS, | 1189 | int proto, option; |
1190 | &Tflag, sizeof(Tflag)) == -1) | 1190 | |
1191 | if (af == AF_INET6) { | ||
1192 | proto = IPPROTO_IPV6; | ||
1193 | option = IPV6_TCLASS; | ||
1194 | } else { | ||
1195 | proto = IPPROTO_IP; | ||
1196 | option = IP_TOS; | ||
1197 | } | ||
1198 | |||
1199 | if (setsockopt(s, proto, option, &Tflag, sizeof(Tflag)) == -1) | ||
1191 | err(1, "set IP ToS"); | 1200 | err(1, "set IP ToS"); |
1192 | } | 1201 | } |
1193 | #endif | 1202 | #endif |