stabilized test IP4MULTICAST_UNIDIR; added tests OPENSSL_SCTPx_FORK; minor improvements
diff --git a/CHANGES b/CHANGES
index b6a155b..1b33dc8 100644
--- a/CHANGES
+++ b/CHANGES
@@ -5,7 +5,7 @@
address chains consisting of inter and endpoint addresses, linked with
'|' (pipe character)
- reverting inter addresses
+ reverse inter addresses
dual type inter addresses
diff --git a/test.sh b/test.sh
index f1510e6..d3d46c3 100755
--- a/test.sh
+++ b/test.sh
@@ -8044,10 +8044,10 @@
$CMD1 2>"${te}1" >"${tf}" &
pid1="$!"
waitip4proto $ts1p 1
-usleep $MICROS
+usleep $((10*MICROS))
echo "$da" |$CMD2 2>>"${te}2"
rc2="$?"
-usleep $MICROS
+usleep $((10*MICROS))
kill "$pid1" 2>/dev/null; wait;
if [ "$rc2" -ne 0 ]; then
$PRINTF "$FAILED: $SOCAT:\n"
@@ -10139,6 +10139,65 @@
N=$((N+1))
+while read KEYW PF LO
+do
+if [ -z "$KEYW" ] || [[ "$KEYW" == \#* ]]; then continue; fi
+#
+pf="$(echo $PF |tr A-Z a-z)"
+proto="$(echo $KEYW |tr A-Z a-z)"
+NAME=OPENSSL_${KEYW}_FORK
+case "$TESTS" in
+*%functions%*|*%openssl%*|*%sctp%*|*%$pf%*|*%$NAME%*)
+TEST="$NAME: openssl over SCTP with server fork"
+if ! eval $NUMCOND; then :;
+elif ! testaddrs openssl >/dev/null; then
+ $PRINTF "test $F_n $TEST... ${YELLOW}OPENSSL not available${NORMAL}\n" $N
+ numCANT=$((numCANT+1))
+elif ! testaddrs listen sctp $pf >/dev/null || ! runs$pf >/dev/null; then
+ $PRINTF "test $F_n $TEST... ${YELLOW}SCTP/$PF not available${NORMAL}\n" $N
+ numCANT=$((numCANT+1))
+else
+gentestcert testsrv
+tf="$td/test$N.stdout"
+te="$td/test$N.stderr"
+tdiff="$td/test$N.diff"
+da1="test$N $(date) $RANDOM"
+da2="test$N $(date) $RANDOM"
+CMD0="$SOCAT $opts ${KEYW}-LISTEN:$PORT,reuseaddr,fork ^OPENSSL-LISTEN,$SOCAT_EGD',cert=testsrv.crt,key=testsrv.key,verify=0|pipe'"
+CMD1="$SOCAT $opts - openssl,verify=0,$SOCAT_EGD|${KEYW}:$LOCALHOST:$PORT"
+printf "test $F_n $TEST... " $N
+eval "$CMD0 2>\"${te}0\" &"
+pid0=$! # background process id
+wait${proto}port $PORT
+(echo "$da1"; sleep 1) |$CMD1 >${tf}1 2>"${te}1"
+(echo "$da2"; sleep 1) |$CMD1 >${tf}2 2>"${te}2"
+kill $pid0 2>/dev/null
+if ! echo "$da2" |diff - "${tf}2" >"$tdiff"; then
+ $PRINTF "$FAILED: $SOCAT:\n"
+ echo "$CMD0 &"
+ echo "$CMD1"
+ cat "${te}0"
+ cat "${te}1"
+ cat "${te}2"
+ cat "$tdiff"
+ numFAIL=$((numFAIL+1))
+else
+ $PRINTF "$OK\n"
+ if [ -n "$debug" ]; then cat "${te}0" "${te}1" "${te}2"; fi
+ numOK=$((numOK+1))
+fi
+wait
+fi ;; # NUMCOND, feats
+esac
+PORT=$((PORT+1))
+N=$((N+1))
+#
+done <<<"
+SCTP4 IP4 127.0.0.1
+SCTP6 IP6 [::1]
+"
+
+
echo "summary: $((N-1)) tests; $numOK ok, $numFAIL failed, $numCANT could not be performed"
if [ "$numFAIL" -gt 0 ]; then
diff --git a/xiohelp.c b/xiohelp.c
index 4732507..a135a83 100644
--- a/xiohelp.c
+++ b/xiohelp.c
@@ -18,18 +18,18 @@
"SHORT", "SIZE_T", "SOCKADDR", "UNSIGNED-INT",
"UNSIGNED-LONG","UNSIGNED-SHORT","MODE_T", "GID_T",
"UID_T", "INT[3]", "STRUCT-TIMEVAL", "STRUCT-TIMESPEC",
- "DOUBLE", "STRING-NULL", "LONG-LONG", "OFF_T",
+ "DOUBLE", "STRING-NULL", "LONG:LONG", "OFF_T",
"OFF64_T", "INT:INT", "INT:INTP", "INT:BIN",
"INT:STRING", "INT:INT:INT", "INT:INT:BIN", "INT:INT:STRING",
- "IP4NAME",
+ "IP4NAME", "STRING:STRING",
#if HAVE_STRUCT_LINGER
- "STRUCT-LINGER",
+ "STRUCT-LINGER",
#endif
#if HAVE_STRUCT_IP_MREQN
- "STRUCT-IP_MREQN",
+ "STRUCT-IP_MREQN",
#elif HAVE_STRUCT_IP_MREQ
- "STRUCT-IP_MREQ",
+ "STRUCT-IP_MREQ",
#endif
} ;
diff --git a/xioopts.h b/xioopts.h
index ac2d31e..6276cc8 100644
--- a/xioopts.h
+++ b/xioopts.h
@@ -65,6 +65,7 @@
TYPE_INT_INT_STRING, /* 3 params: first and second are int, 3rd is string */
TYPE_IP4NAME, /* IPv4 hostname or address */
+ TYPE_STRING2, /* string:string */
#if HAVE_STRUCT_LINGER
TYPE_LINGER, /* struct linger */
#endif /* HAVE_STRUCT_LINGER */