summaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorFlorin Coras <fcoras@cisco.com>2019-08-29 12:03:17 -0700
committerDamjan Marion <dmarion@me.com>2019-08-30 13:15:42 +0000
commit57c88938f8a80e63e7307cacaca23b0ab3a51b6c (patch)
treeb62690ce6a9b9d07fee1b83e8b2cf3d8fb8bdece /src/plugins
parenta495a3ea146a8484dac9f6b594fb2b044437c7a4 (diff)
vcl: allow non-blocking connects
Type: feature Change-Id: I55349f482ce6781337f747b2f0d2c0a027c3a675 Signed-off-by: Florin Coras <fcoras@cisco.com>
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/hs_apps/vcl/sock_test_client.c21
-rw-r--r--src/plugins/hs_apps/vcl/vcl_test_client.c15
2 files changed, 22 insertions, 14 deletions
diff --git a/src/plugins/hs_apps/vcl/sock_test_client.c b/src/plugins/hs_apps/vcl/sock_test_client.c
index 13227f28265..ed43e7faaf1 100644
--- a/src/plugins/hs_apps/vcl/sock_test_client.c
+++ b/src/plugins/hs_apps/vcl/sock_test_client.c
@@ -651,14 +651,6 @@ sock_test_connect_test_sockets (uint32_t num_test_sockets)
errno_val);
return tsock->fd;
}
- if (fcntl (tsock->fd, F_SETFL, O_NONBLOCK) < 0)
- {
- errno_val = errno;
- perror ("ERROR in sock_test_connect_test_sockets()");
- fprintf (stderr, "CLIENT: ERROR: fcntl failed (errno = %d)!\n",
- errno_val);
- return -1;
- }
#ifdef VCL_TEST
rv = vppcom_session_connect (tsock->fd, &scm->server_endpt);
@@ -668,9 +660,8 @@ sock_test_connect_test_sockets (uint32_t num_test_sockets)
rv = -1;
}
#else
- rv =
- connect (tsock->fd, (struct sockaddr *) &scm->server_addr,
- scm->server_addr_size);
+ rv = connect (tsock->fd, (struct sockaddr *) &scm->server_addr,
+ scm->server_addr_size);
#endif
if (rv < 0)
{
@@ -680,6 +671,14 @@ sock_test_connect_test_sockets (uint32_t num_test_sockets)
"(errno = %d)!\n", errno_val);
return -1;
}
+ if (fcntl (tsock->fd, F_SETFL, O_NONBLOCK) < 0)
+ {
+ errno_val = errno;
+ perror ("ERROR in sock_test_connect_test_sockets()");
+ fprintf (stderr, "CLIENT: ERROR: fcntl failed (errno = %d)!\n",
+ errno_val);
+ return -1;
+ }
tsock->cfg = ctrl->cfg;
vcl_test_session_buf_alloc (tsock);
sock_test_cfg_sync (tsock);
diff --git a/src/plugins/hs_apps/vcl/vcl_test_client.c b/src/plugins/hs_apps/vcl/vcl_test_client.c
index b9bdd6eed55..55bc7889098 100644
--- a/src/plugins/hs_apps/vcl/vcl_test_client.c
+++ b/src/plugins/hs_apps/vcl/vcl_test_client.c
@@ -123,7 +123,7 @@ vtc_quic_connect_test_sessions (vcl_test_client_worker_t * wrk)
{
vcl_test_client_main_t *vcm = &vcl_client_main;
vcl_test_session_t *ts, *tq;
- uint32_t i;
+ uint32_t i, flags, flen;
int rv;
if (wrk->cfg.num_test_sessions < 1 || wrk->cfg.num_test_sessions_perq < 1)
@@ -155,7 +155,7 @@ vtc_quic_connect_test_sessions (vcl_test_client_worker_t * wrk)
for (i = 0; i < wrk->cfg.num_test_qsessions; i++)
{
tq = &wrk->qsessions[i];
- tq->fd = vppcom_session_create (vcm->proto, 1 /* is_nonblocking */ );
+ tq->fd = vppcom_session_create (vcm->proto, 0 /* is_nonblocking */ );
tq->session_index = i;
if (tq->fd < 0)
{
@@ -163,12 +163,16 @@ vtc_quic_connect_test_sessions (vcl_test_client_worker_t * wrk)
return tq->fd;
}
+ /* Connect is blocking */
rv = vppcom_session_connect (tq->fd, &vcm->server_endpt);
if (rv < 0)
{
vterr ("vppcom_session_connect()", rv);
return rv;
}
+ flags = O_NONBLOCK;
+ flen = sizeof (flags);
+ vppcom_session_attr (tq->fd, VPPCOM_ATTR_SET_FLAGS, &flags, &flen);
vtinf ("Test Qsession %d (fd %d) connected.", i, tq->fd);
}
wrk->n_qsessions = wrk->cfg.num_test_qsessions;
@@ -223,6 +227,7 @@ vtc_connect_test_sessions (vcl_test_client_worker_t * wrk)
vcl_test_client_main_t *vcm = &vcl_client_main;
vcl_test_session_t *ts;
uint32_t n_test_sessions;
+ uint32_t flags, flen;
int i, rv;
if (vcm->proto == VPPCOM_PROTO_QUIC)
@@ -253,19 +258,23 @@ vtc_connect_test_sessions (vcl_test_client_worker_t * wrk)
for (i = 0; i < n_test_sessions; i++)
{
ts = &wrk->sessions[i];
- ts->fd = vppcom_session_create (vcm->proto, 1 /* is_nonblocking */ );
+ ts->fd = vppcom_session_create (vcm->proto, 0 /* is_nonblocking */ );
if (ts->fd < 0)
{
vterr ("vppcom_session_create()", ts->fd);
return ts->fd;
}
+ /* Connect is blocking */
rv = vppcom_session_connect (ts->fd, &vcm->server_endpt);
if (rv < 0)
{
vterr ("vppcom_session_connect()", rv);
return rv;
}
+ flags = O_NONBLOCK;
+ flen = sizeof (flags);
+ vppcom_session_attr (ts->fd, VPPCOM_ATTR_SET_FLAGS, &flags, &flen);
vtinf ("Test session %d (fd %d) connected.", i, ts->fd);
}
wrk->n_sessions = n_test_sessions;