- Pass a copy of argv[] to prevent changes by strtok(3),
  otherwise rc.subr(8) pexp might not match and cause rcctl failure.
  Pending https://github.com/esnet/iperf/pull/1960 (with extra NULL check)

- Default to IPv4.

Index: src/iperf_api.c
--- src/iperf_api.c.orig
+++ src/iperf_api.c
@@ -1261,7 +1261,7 @@ iperf_parse_arguments(struct iperf_test *test, int arg
                 }
 		iperf_set_test_role(test, 's');
                 break;
-            case 'c':
+            case 'c': {
                 if (test->role == 's') {
                     i_errno = IESERVCLIENT;
                     return -1;
@@ -1269,7 +1269,12 @@ iperf_parse_arguments(struct iperf_test *test, int arg
 		iperf_set_test_role(test, 'c');
 		iperf_set_test_server_hostname(test, optarg);
 
-                if (iperf_parse_hostname(test, optarg, &p, &p1)) {
+                char *arg = strdup(optarg);
+                if (arg == NULL) {
+                    i_errno = -1;
+                    return -1;
+                }
+                if (iperf_parse_hostname(test, arg, &p, &p1)) {
 #if defined(HAVE_SO_BINDTODEVICE)
                     /* Get rid of the hostname we saved earlier. */
                     free(iperf_get_test_server_hostname(test));
@@ -1280,7 +1285,9 @@ iperf_parse_arguments(struct iperf_test *test, int arg
                     return -1;
 #endif /* HAVE_SO_BINDTODEVICE */
                 }
+                free(arg);
                 break;
+            }
             case 'u':
                 set_protocol(test, Pudp);
 		client_flag = 1;
@@ -1392,10 +1399,15 @@ iperf_parse_arguments(struct iperf_test *test, int arg
 		client_flag = 1;
                 break;
 
-            case 'B':
+            case 'B': {
                 iperf_set_test_bind_address(test, optarg);
 
-                if (iperf_parse_hostname(test, optarg, &p, &p1)) {
+                char *arg = strdup(optarg);
+                if (arg == NULL) {
+                    i_errno = -1;
+                    return -1;
+                }
+                if (iperf_parse_hostname(test, arg, &p, &p1)) {
 #if defined(HAVE_SO_BINDTODEVICE)
                     /* Get rid of the hostname we saved earlier. */
                     free(iperf_get_test_bind_address(test));
@@ -1406,7 +1418,9 @@ iperf_parse_arguments(struct iperf_test *test, int arg
                     return -1;
 #endif /* HAVE_SO_BINDTODEVICE */
                 }
+                free(arg);
                 break;
+            }
 #if defined (HAVE_SO_BINDTODEVICE)
             case OPT_BIND_DEV:
                 iperf_set_test_bind_dev(test, optarg);
@@ -3116,7 +3130,7 @@ iperf_defaults(struct iperf_test *testp)
     testp->stats_interval = testp->reporter_interval = 1;
     testp->num_streams = 1;
 
-    testp->settings->domain = AF_UNSPEC;
+    testp->settings->domain = AF_INET;
     testp->settings->unit_format = 'a';
     testp->settings->socket_bufsize = 0;    /* use autotuning */
     testp->settings->blksize = DEFAULT_TCP_BLKSIZE;
