Patch taken from alpinelinux:
http://git.alpinelinux.org/cgit/aports/commit/?id=3d5e7f0642490428f87b2aa499cd830043b42b18

Do not rely on optopt for checking if there is an error.
Instead check if getopt() returns a '?' and set a flag
that indicates an argument error.

Later check this flag and error out, if it is set.

--- usr/iscsiadm.c	2016-09-29 20:33:24.000000000 +0200
+++ usr/iscsiadm.c	2017-01-08 03:03:20.648496369 +0100
@@ -3263,7 +3263,8 @@
 	int packet_size=32, ping_count=1, ping_interval=0;
 	int do_discover = 0, sub_mode = -1;
 	int portal_type = -1;
	int timeout = ISCSID_REQ_TIMEOUT;
+	int argerror = 0;
 	struct sigaction sa_old;
 	struct sigaction sa_new;
 	struct list_head ifaces;
@@ -3426,6 +3427,11 @@
 			break;
 		case 'h':
 			usage(0);
+			break;
+		case '?':
+			log_error("unrecognized character '%c'", optopt);
+			argerror = 1;
+			break;
 		}
 
 		if (name && value) {
@@ -3441,8 +3446,7 @@
 		}
 	}
 
-	if (optopt) {
-		log_error("unrecognized character '%c'", optopt);
+	if (argerror) {
 		rc = ISCSI_ERR_INVAL;
 		goto free_ifaces;
 	}
