diff options
author | Alyssa Ross <hi@alyssa.is> | 2021-03-24 18:21:34 +0000 |
---|---|---|
committer | Alyssa Ross <hi@alyssa.is> | 2021-03-24 19:50:12 +0000 |
commit | 8d75b0f46a367318c634f71a5a964cdbb9578977 (patch) | |
tree | 945af01ee23fa148d166bbdfe656392163b1575e | |
parent | d24ff2d26aa45cb53f492a3f18ba6ce8a76f9d7d (diff) | |
download | ucspi-vsock-master.tar ucspi-vsock-master.tar.gz ucspi-vsock-master.tar.bz2 ucspi-vsock-master.tar.lz ucspi-vsock-master.tar.xz ucspi-vsock-master.tar.zst ucspi-vsock-master.zip |
I found myself running vsockclient 2 1024 true in a situation where it just mattered that a connection was made, and no data needed to be exchanged of it. That I found myself doing this is quite a strong indicator that the program to exec into should be optional. UCSPI-1996[1] doesn't specify what should happen if no application is provided, so I think this is a reasonable interpretation. I'm not sure if I feel the same for vsockserver(d), so I haven't made the corresponding change there. I'll wait to see if there's ever a need for it. [1]: https://cr.yp.to/proto/ucspi.txt Message-Id: <20210324182433.19110-1-hi@alyssa.is> Reviewed-by: Cole Helbling <cole.e.helbling@outlook.com>
-rw-r--r-- | vsockclient.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/vsockclient.c b/vsockclient.c index 934cfa0..456810d 100644 --- a/vsockclient.c +++ b/vsockclient.c @@ -41,11 +41,9 @@ int main(int argc, char *argv[]) } } - // Check there are enough positional arguments (two for the - // address and at least one to exec into). - if (optind > argc - 3) + // Find the address (cid and port) to connect to. + if (optind > argc - 2) ex_usage(); - if (getu32(argv[optind++], 0, UINT32_MAX, &rcid)) ex_usage(); if (getu32(argv[optind++], 0, UINT32_MAX, &rport)) @@ -69,6 +67,11 @@ int main(int argc, char *argv[]) "connect to %" PRIu32 ":%" PRIu32 " failed", rcid, rport); ilog("connected to %" PRIu32 ":%" PRIu32 "!", rcid, rport); + // If we have nothing to exec into, we're done. (Sometimes + // just connecting on its own is enough.) + if (optind == argc) + return 0; + // Set up the file descriptors to the well-known UCSPI numbers. if (dup2(fd, 6) == -1) diee(EX_OSERR, "dup2"); |