[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