[LTP] [PATCH v7 1/2] connect01: Convert to new API
Petr Vorel
pvorel@suse.cz
Wed Jul 1 10:34:22 CEST 2026
Hi Wei,
to speedup I dared to merge with following diff.
My changes are:
* use designated initializers
* improve doc
* specify salen only when not detectable
* void => struct sockaddr_in
Thanks!
Kind regards,
Petr
+++ testcases/kernel/syscalls/connect/connect01.c
@@ -1,11 +1,19 @@
// SPDX-License-Identifier: GPL-2.0-or-later
/*
- * Copyright (c) International Business Machines Corp., 2001
+ * Copyright (c) International Business Machines Corp., 2001
* Copyright (c) Linux Test Project, 2006-2026
*/
/*\
- * Verify that :manpage:`connect(2)` returns the proper errno for various failure cases.
+ * Verify that :manpage:`connect(2)` fails with -1 and sets proper errno:
+ *
+ * - EBADF if sockfd is not a valid open file descriptor
+ * - EFAULT if socket structure address is outside the user's address space
+ * - EINVAL if addrlen is not valid
+ * - ENOTSOCK if file descriptor sockfd does not refer to a socket
+ * - EISCONN if socket is already connected
+ * - ECONNREFUSED if connect on a socket found nothing listening on remote address
+ * - EAFNOSUPPORT if address doesn't have the correct address family in sa_family
*/
#include <sys/types.h>
@@ -30,25 +38,25 @@ static pid_t pid;
static struct test_case_t {
int *fd;
- void *addr;
+ struct sockaddr_in *addr;
socklen_t salen;
int exp_errno;
char *desc;
} tcases[] = {
- {&fd_invalid, &sock1, sizeof(sock1), EBADF,
- "sockfd is not a valid open file descriptor"},
- {&fd_socket, NULL, sizeof(sock1), EFAULT,
- "socket structure address is outside the user's address space"},
- {&fd_socket, &sock1, 3, EINVAL,
- "addrlen is not valid"},
- {&fd_null, &sock1, sizeof(sock1), ENOTSOCK,
- "file descriptor sockfd does not refer to a socket"},
- {&fd_connected, &sock1, sizeof(sock1), EISCONN,
- "socket is already connected"},
- {&fd_socket, &sock2, sizeof(sock2), ECONNREFUSED,
- "connect on a socket found no one listening on remote address"},
- {&fd_socket, &sock3, sizeof(sock3), EAFNOSUPPORT,
- "address doesn't have the correct address family in sa_family"},
+ { .fd = &fd_invalid, .addr = &sock1, .exp_errno = EBADF,
+ .desc = "sockfd is not a valid open file descriptor"},
+ { .fd = &fd_socket, .salen = sizeof(sock1), .exp_errno = EFAULT,
+ .desc = "socket structure address is outside the user's address space"},
+ { .fd = &fd_socket, .addr = &sock1, .salen = 3, .exp_errno = EINVAL,
+ .desc = "addrlen is not valid"},
+ { .fd = &fd_null, .addr = &sock1, .exp_errno = ENOTSOCK,
+ .desc = "file descriptor sockfd does not refer to a socket"},
+ { .fd = &fd_connected, .addr = &sock1, .exp_errno = EISCONN,
+ .desc = "socket is already connected"},
+ { .fd = &fd_socket, .addr = &sock2, .exp_errno = ECONNREFUSED,
+ .desc = "connect on a socket found nothing listening on remote address"},
+ { .fd = &fd_socket, .addr = &sock3, .exp_errno = EAFNOSUPPORT,
+ .desc = "address doesn't have the correct address family in sa_family"},
};
static int sys_connect(int sockfd, const struct sockaddr *addr,
@@ -126,8 +134,9 @@ static void verify_connect(unsigned int i)
{
struct test_case_t *tc = &tcases[i];
void *addr = tc->addr ? tc->addr : bad_addr;
+ socklen_t salen = tc->salen ?: sizeof(*tc->addr);
- TST_EXP_FAIL(sys_connect(*tc->fd, addr, tc->salen),
+ TST_EXP_FAIL(sys_connect(*tc->fd, addr, salen),
tc->exp_errno, "%s", tc->desc);
}
More information about the ltp
mailing list