Message ID | 20231103175551.41025-4-f.storniolo95@gmail.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 84d5fb9741316ca53f0f7c23b82f30e0bb33c38e |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | vsock: fix server prevents clients from reconnecting | expand |
On Fri, Nov 03, 2023 at 06:55:50PM +0100, f.storniolo95@gmail.com wrote: >From: Filippo Storniolo <f.storniolo95@gmail.com> > >This is a preliminary patch to introduce SOCK_STREAM bind connect test. >vsock_accept() is split into vsock_listen() and vsock_accept(). > >Co-developed-by: Luigi Leonardi <luigi.leonardi@outlook.com> >Signed-off-by: Luigi Leonardi <luigi.leonardi@outlook.com> >Signed-off-by: Filippo Storniolo <f.storniolo95@gmail.com> >--- > tools/testing/vsock/util.c | 32 ++++++++++++++++++++------------ > 1 file changed, 20 insertions(+), 12 deletions(-) LGTM! Reviewed-by: Stefano Garzarella <sgarzare@redhat.com> > >diff --git a/tools/testing/vsock/util.c b/tools/testing/vsock/util.c >index 698b0b44a2ee..2fc96f29bdf2 100644 >--- a/tools/testing/vsock/util.c >+++ b/tools/testing/vsock/util.c >@@ -136,11 +136,8 @@ int vsock_seqpacket_connect(unsigned int cid, unsigned int port) > return vsock_connect(cid, port, SOCK_SEQPACKET); > } > >-/* Listen on <cid, port> and return the first incoming connection. The remote >- * address is stored to clientaddrp. clientaddrp may be NULL. >- */ >-static int vsock_accept(unsigned int cid, unsigned int port, >- struct sockaddr_vm *clientaddrp, int type) >+/* Listen on <cid, port> and return the file descriptor. */ >+static int vsock_listen(unsigned int cid, unsigned int port, int type) > { > union { > struct sockaddr sa; >@@ -152,14 +149,7 @@ static int vsock_accept(unsigned int cid, unsigned int port, > .svm_cid = cid, > }, > }; >- union { >- struct sockaddr sa; >- struct sockaddr_vm svm; >- } clientaddr; >- socklen_t clientaddr_len = sizeof(clientaddr.svm); > int fd; >- int client_fd; >- int old_errno; > > fd = socket(AF_VSOCK, type, 0); > if (fd < 0) { >@@ -177,6 +167,24 @@ static int vsock_accept(unsigned int cid, unsigned int port, > exit(EXIT_FAILURE); > } > >+ return fd; >+} >+ >+/* Listen on <cid, port> and return the first incoming connection. The remote >+ * address is stored to clientaddrp. clientaddrp may be NULL. >+ */ >+static int vsock_accept(unsigned int cid, unsigned int port, >+ struct sockaddr_vm *clientaddrp, int type) >+{ >+ union { >+ struct sockaddr sa; >+ struct sockaddr_vm svm; >+ } clientaddr; >+ socklen_t clientaddr_len = sizeof(clientaddr.svm); >+ int fd, client_fd, old_errno; >+ >+ fd = vsock_listen(cid, port, type); >+ > control_writeln("LISTENING"); > > timeout_begin(TIMEOUT); >-- >2.41.0 >
diff --git a/tools/testing/vsock/util.c b/tools/testing/vsock/util.c index 698b0b44a2ee..2fc96f29bdf2 100644 --- a/tools/testing/vsock/util.c +++ b/tools/testing/vsock/util.c @@ -136,11 +136,8 @@ int vsock_seqpacket_connect(unsigned int cid, unsigned int port) return vsock_connect(cid, port, SOCK_SEQPACKET); } -/* Listen on <cid, port> and return the first incoming connection. The remote - * address is stored to clientaddrp. clientaddrp may be NULL. - */ -static int vsock_accept(unsigned int cid, unsigned int port, - struct sockaddr_vm *clientaddrp, int type) +/* Listen on <cid, port> and return the file descriptor. */ +static int vsock_listen(unsigned int cid, unsigned int port, int type) { union { struct sockaddr sa; @@ -152,14 +149,7 @@ static int vsock_accept(unsigned int cid, unsigned int port, .svm_cid = cid, }, }; - union { - struct sockaddr sa; - struct sockaddr_vm svm; - } clientaddr; - socklen_t clientaddr_len = sizeof(clientaddr.svm); int fd; - int client_fd; - int old_errno; fd = socket(AF_VSOCK, type, 0); if (fd < 0) { @@ -177,6 +167,24 @@ static int vsock_accept(unsigned int cid, unsigned int port, exit(EXIT_FAILURE); } + return fd; +} + +/* Listen on <cid, port> and return the first incoming connection. The remote + * address is stored to clientaddrp. clientaddrp may be NULL. + */ +static int vsock_accept(unsigned int cid, unsigned int port, + struct sockaddr_vm *clientaddrp, int type) +{ + union { + struct sockaddr sa; + struct sockaddr_vm svm; + } clientaddr; + socklen_t clientaddr_len = sizeof(clientaddr.svm); + int fd, client_fd, old_errno; + + fd = vsock_listen(cid, port, type); + control_writeln("LISTENING"); timeout_begin(TIMEOUT);