mirror of
https://github.com/torvalds/linux.git
synced 2026-05-30 01:53:29 +02:00
vsock/test: Introduce vsock_bind_try() helper
Create a socket and bind() it. If binding failed, gracefully return an error code while preserving `errno`. Base vsock_bind() on top of it. Suggested-by: Stefano Garzarella <sgarzare@redhat.com> Reviewed-by: Stefano Garzarella <sgarzare@redhat.com> Signed-off-by: Michal Luczaj <mhal@rbox.co> Reviewed-by: Luigi Leonardi <leonardi@redhat.com> Link: https://patch.msgid.link/20250611-vsock-test-inc-cov-v3-1-5834060d9c20@rbox.co Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
0f0decc777
commit
d56a8dbff8
|
|
@ -121,15 +121,17 @@ bool vsock_wait_sent(int fd)
|
|||
return !ret;
|
||||
}
|
||||
|
||||
/* Create socket <type>, bind to <cid, port> and return the file descriptor. */
|
||||
int vsock_bind(unsigned int cid, unsigned int port, int type)
|
||||
/* Create socket <type>, bind to <cid, port>.
|
||||
* Return the file descriptor, or -1 on error.
|
||||
*/
|
||||
int vsock_bind_try(unsigned int cid, unsigned int port, int type)
|
||||
{
|
||||
struct sockaddr_vm sa = {
|
||||
.svm_family = AF_VSOCK,
|
||||
.svm_cid = cid,
|
||||
.svm_port = port,
|
||||
};
|
||||
int fd;
|
||||
int fd, saved_errno;
|
||||
|
||||
fd = socket(AF_VSOCK, type, 0);
|
||||
if (fd < 0) {
|
||||
|
|
@ -138,6 +140,22 @@ int vsock_bind(unsigned int cid, unsigned int port, int type)
|
|||
}
|
||||
|
||||
if (bind(fd, (struct sockaddr *)&sa, sizeof(sa))) {
|
||||
saved_errno = errno;
|
||||
close(fd);
|
||||
errno = saved_errno;
|
||||
fd = -1;
|
||||
}
|
||||
|
||||
return fd;
|
||||
}
|
||||
|
||||
/* Create socket <type>, bind to <cid, port> and return the file descriptor. */
|
||||
int vsock_bind(unsigned int cid, unsigned int port, int type)
|
||||
{
|
||||
int fd;
|
||||
|
||||
fd = vsock_bind_try(cid, port, type);
|
||||
if (fd < 0) {
|
||||
perror("bind");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -44,6 +44,7 @@ int vsock_connect(unsigned int cid, unsigned int port, int type);
|
|||
int vsock_accept(unsigned int cid, unsigned int port,
|
||||
struct sockaddr_vm *clientaddrp, int type);
|
||||
int vsock_stream_connect(unsigned int cid, unsigned int port);
|
||||
int vsock_bind_try(unsigned int cid, unsigned int port, int type);
|
||||
int vsock_bind(unsigned int cid, unsigned int port, int type);
|
||||
int vsock_bind_connect(unsigned int cid, unsigned int port,
|
||||
unsigned int bind_port, int type);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user