@@ -369,12 +369,16 @@ int connect_to_fd(int server_fd, int timeout_ms)
return connect_to_fd_opts(server_fd, type, &opts);
}
-int connect_fd_to_fd(int client_fd, int server_fd, int timeout_ms)
+int connect_fd_to_fd(int client_fd, int server_fd,
+ const struct network_helper_opts *opts)
{
struct sockaddr_storage addr;
socklen_t len = sizeof(addr);
- if (settimeo(client_fd, timeout_ms))
+ if (!opts)
+ opts = &default_opts;
+
+ if (settimeo(client_fd, opts->timeout_ms))
return -1;
if (getsockname(server_fd, (struct sockaddr *)&addr, &len)) {
@@ -382,7 +386,7 @@ int connect_fd_to_fd(int client_fd, int server_fd, int timeout_ms)
return -1;
}
- if (connect_fd_to_addr(client_fd, &addr, len, false))
+ if (connect_fd_to_addr(client_fd, &addr, len, opts->must_fail))
return -1;
return 0;
@@ -66,7 +66,8 @@ int connect_to_addr(int type, const struct sockaddr_storage *addr, socklen_t len
const struct network_helper_opts *opts);
int connect_to_fd(int server_fd, int timeout_ms);
int connect_to_fd_opts(int server_fd, int type, const struct network_helper_opts *opts);
-int connect_fd_to_fd(int client_fd, int server_fd, int timeout_ms);
+int connect_fd_to_fd(int client_fd, int server_fd,
+ const struct network_helper_opts *opts);
int fastopen_connect(int server_fd, const char *data, unsigned int data_len,
int timeout_ms);
int make_sockaddr(int family, const char *addr_str, __u16 port,
@@ -33,13 +33,16 @@ enum {
static int connect_to_server(int srv_fd)
{
+ struct network_helper_opts opts = {
+ .timeout_ms = TIMEOUT_MS,
+ };
int fd = -1;
fd = socket(AF_INET, SOCK_STREAM, 0);
if (!ASSERT_GE(fd, 0, "socket"))
goto out;
- if (!ASSERT_EQ(connect_fd_to_fd(fd, srv_fd, TIMEOUT_MS), 0, "connect_fd_to_fd")) {
+ if (!ASSERT_EQ(connect_fd_to_fd(fd, srv_fd, &opts), 0, "connect_fd_to_fd")) {
close(fd);
fd = -1;
}
@@ -8,6 +8,9 @@
static void run_lookup_test(__u16 *g_serv_port, int out_sk)
{
+ struct network_helper_opts opts = {
+ .timeout_ms = 1000,
+ };
int serv_sk = -1, in_sk = -1, serv_in_sk = -1, err;
struct sockaddr_in6 addr = {};
socklen_t addr_len = sizeof(addr);
@@ -24,7 +27,7 @@ static void run_lookup_test(__u16 *g_serv_port, int out_sk)
*g_serv_port = addr.sin6_port;
/* Client outside of test cgroup should fail to connect by timeout. */
- err = connect_fd_to_fd(out_sk, serv_sk, 1000);
+ err = connect_fd_to_fd(out_sk, serv_sk, &opts);
if (CHECK(!err || errno != EINPROGRESS, "connect_fd_to_fd",
"unexpected result err %d errno %d\n", err, errno))
goto cleanup;
@@ -86,7 +86,7 @@ static int talk_to_cgroup(int *client_fd, int *listen_fd, int *service_fd,
skel->bss->g_sock_port = ntohs(port);
/* Connect client to server */
- err = connect_fd_to_fd(*client_fd, *listen_fd, 0);
+ err = connect_fd_to_fd(*client_fd, *listen_fd, NULL);
if (!ASSERT_OK(err, "connect_fd_to_fd"))
return -1;
*service_fd = accept(*listen_fd, NULL, NULL);
@@ -136,7 +136,7 @@ static int talk_to_outside(int *client_fd, int *listen_fd, int *service_fd,
skel->bss->g_sock_port = ntohs(port);
/* Connect client to server */
- err = connect_fd_to_fd(*client_fd, *listen_fd, 0);
+ err = connect_fd_to_fd(*client_fd, *listen_fd, NULL);
if (!ASSERT_OK(err, "connect_fd_to_fd"))
return -1;
*service_fd = accept(*listen_fd, NULL, NULL);