3 SOCK state=listen path=test_mkfds-unix-stream-shutdown listen stream test_mkfds-unix-stream-shutdown
4 SOCK state=connected connected stream
5 SOCK state=connected path=test_mkfds-unix-stream-shutdown connected stream test_mkfds-unix-stream-shutdown
+(shutdown) ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH: 0
+ 3 SOCK state=listen path=test_mkfds-unix-seqpacket type=seqpacket listen seqpacket test_mkfds-unix-seqpacket
+ 4 SOCK state=connected type=seqpacket connected seqpacket
+ 5 SOCK state=connected path=test_mkfds-unix-seqpacket type=seqpacket connected seqpacket test_mkfds-unix-seqpacket
+ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH: 0
+ 3 SOCK state=listen path=@test_mkfds-unix-seqpacket-abs listen stream @test_mkfds-unix-seqpacket-abs
+ 4 SOCK state=connected connected stream
+ 5 SOCK state=connected path=@test_mkfds-unix-seqpacket-abs connected stream @test_mkfds-unix-seqpacket-abs
+(abs) ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH: 0
+ 3 SOCK state=listen path=test_mkfds-unix-seqpacket-shutdown type=seqpacket listen seqpacket test_mkfds-unix-seqpacket-shutdown
+ 4 SOCK state=connected type=seqpacket connected seqpacket
+ 5 SOCK state=connected path=test_mkfds-unix-seqpacket-shutdown type=seqpacket connected seqpacket test_mkfds-unix-seqpacket-shutdown
(shutdown) ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH: 0
}
}
-static void *make_unix_stream(const struct factory *factory, struct fdesc fdescs[],
- int argc, char ** argv)
+static void *make_unix_stream_core(const struct factory *factory, struct fdesc fdescs[],
+ int argc, char ** argv, int type, const char *typestr)
{
struct arg path = decode_arg("path", factory->params, argc, argv);
const char *spath = ARG_STRING(path);
if (iclient_shutdown < 0 || iclient_shutdown > 3)
errx(EXIT_FAILURE, "the client shudown specification in unexpected range");
- ssd = socket(AF_UNIX, SOCK_STREAM, 0);
+ ssd = socket(AF_UNIX, type, 0);
if (ssd < 0)
err(EXIT_FAILURE,
- "failed to make a socket with AF_UNIX + SOCK_STREAM (server side)");
+ "failed to make a socket with AF_UNIX + SOCK_%s (server side)", typestr);
if (ssd != fdescs[0].fd) {
if (dup2(ssd, fdescs[0].fd) < 0) {
int e = errno;
err(EXIT_FAILURE, "failed to listen a socket");
}
- csd = socket(AF_UNIX, SOCK_STREAM, 0);
+ csd = socket(AF_UNIX, type, 0);
if (csd < 0)
err(EXIT_FAILURE,
- "failed to make a socket with AF_UNIX + SOCK_STREAM (client side)");
+ "failed to make a socket with AF_UNIX + SOCK_%s (client side)", typestr);
if (csd != fdescs[1].fd) {
if (dup2(csd, fdescs[1].fd) < 0) {
int e = errno;
return NULL;
}
+static void *make_unix_stream(const struct factory *factory, struct fdesc fdescs[],
+ int argc, char ** argv)
+{
+ struct arg type = decode_arg("type", factory->params, argc, argv);
+ const char *stype = ARG_STRING(type);
+
+ int typesym;
+ const char *typestr;
+
+ if (strcmp(stype, "stream") == 0) {
+ typesym = SOCK_STREAM;
+ typestr = "STREAM";
+ } else if (strcmp(stype, "seqpacket") == 0) {
+ typesym = SOCK_SEQPACKET;
+ typestr = "SEQPACKET";
+ } else
+ errx(EXIT_FAILURE, _("unknown unix socket type: %s"), stype);
+
+ free_arg(&type);
+
+ return make_unix_stream_core(factory, fdescs, argc, argv, typesym, typestr);
+}
+
static void *make_unix_dgram(const struct factory *factory, struct fdesc fdescs[],
int argc, char ** argv)
{
.desc = "shutdown the client socket; 1: R, 2: W, 3: RW",
.defv.integer = 0,
},
+ {
+ .name = "type",
+ .type = PTYPE_STRING,
+ .desc = "stream or seqpacket",
+ .defv.string = "stream",
+ },
PARAM_END
},
},
EXPR='(((TYPE == "UNIX-STREAM") or (TYPE == "UNIX")) and (FD >= 3) and (FD <= 5))'
{
- # TYPE is not tested here; AF_UNIX+SOCK_STREAM socket type was changed from "UNIX"
- # to "UNIX-STREAM" at a time in Linux kernel development history.
- coproc MKFDS { "$TS_HELPER_MKFDS" unix-stream $FDS $FDC $FDA \
- path=test_mkfds-unix-stream ; }
- if read -r -u "${MKFDS[0]}" PID; then
- ${TS_CMD_LSFD} -n \
- -o ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH \
- -p "${PID}" -Q "${EXPR}"
- echo 'ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH': $?
+ for t in stream seqpacket; do
+ # TYPE is not tested here; AF_UNIX+SOCK_STREAM socket type was changed from "UNIX"
+ # to "UNIX-STREAM" at a time in Linux kernel development history.
+ coproc MKFDS { "$TS_HELPER_MKFDS" unix-stream $FDS $FDC $FDA \
+ path=test_mkfds-unix-${t} \
+ type=$t ; }
+ if read -r -u "${MKFDS[0]}" PID; then
+ ${TS_CMD_LSFD} -n \
+ -o ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH \
+ -p "${PID}" -Q "${EXPR}"
+ echo 'ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH': $?
- kill -CONT "${PID}"
- wait "${MKFDS_PID}"
- fi
+ kill -CONT "${PID}"
+ wait "${MKFDS_PID}"
+ fi
- coproc MKFDS { "$TS_HELPER_MKFDS" unix-stream $FDS $FDC $FDA \
- path=test_mkfds-unix-stream-abs \
- abstract=true ; }
- if read -r -u "${MKFDS[0]}" PID; then
- ${TS_CMD_LSFD} -n \
- -o ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH \
- -p "${PID}" -Q "${EXPR}"
- echo '(abs) ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH': $?
+ coproc MKFDS { "$TS_HELPER_MKFDS" unix-stream $FDS $FDC $FDA \
+ path=test_mkfds-unix-${t}-abs \
+ abstract=true ; }
+ if read -r -u "${MKFDS[0]}" PID; then
+ ${TS_CMD_LSFD} -n \
+ -o ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH \
+ -p "${PID}" -Q "${EXPR}"
+ echo '(abs) ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH': $?
- kill -CONT "${PID}"
- wait "${MKFDS_PID}"
- fi
+ kill -CONT "${PID}"
+ wait "${MKFDS_PID}"
+ fi
- coproc MKFDS { "$TS_HELPER_MKFDS" unix-stream $FDS $FDC $FDA \
- path=test_mkfds-unix-stream-shutdown \
- server-shutdown=3 \
- client-shutdown=3 ; }
- if read -r -u "${MKFDS[0]}" PID; then
- ${TS_CMD_LSFD} -n \
- -o ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH \
- -p "${PID}" -Q "${EXPR}"
- echo '(shutdown) ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH': $?
- # Surprisingly, the socket status doesn't change at all.
+ coproc MKFDS { "$TS_HELPER_MKFDS" unix-stream $FDS $FDC $FDA \
+ path=test_mkfds-unix-${t}-shutdown \
+ server-shutdown=3 \
+ client-shutdown=3 \
+ type=$t ; }
+ if read -r -u "${MKFDS[0]}" PID; then
+ ${TS_CMD_LSFD} -n \
+ -o ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH \
+ -p "${PID}" -Q "${EXPR}"
+ echo '(shutdown) ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH': $?
+ # Surprisingly, the socket status doesn't change at all.
- kill -CONT "${PID}"
- wait "${MKFDS_PID}"
- fi
+ kill -CONT "${PID}"
+ wait "${MKFDS_PID}"
+ fi
+ done
} > "$TS_OUTPUT" 2>&1
ts_finalize