summaryrefslogtreecommitdiffstats
path: root/src/vppinfra
diff options
context:
space:
mode:
Diffstat (limited to 'src/vppinfra')
-rw-r--r--src/vppinfra/socket.c4
-rw-r--r--src/vppinfra/socket.h2
2 files changed, 4 insertions, 2 deletions
diff --git a/src/vppinfra/socket.c b/src/vppinfra/socket.c
index 1d8b2ca2e45..d8427852400 100644
--- a/src/vppinfra/socket.c
+++ b/src/vppinfra/socket.c
@@ -518,8 +518,10 @@ clib_socket_init (clib_socket_t * s)
s->fd, s->config);
goto done;
}
- /* Connect was blocking so set fd to non-blocking now */
+ /* Connect was blocking so set fd to non-blocking now unless
+ * blocking mode explicitly requested. */
if (!(s->flags & CLIB_SOCKET_F_NON_BLOCKING_CONNECT) &&
+ !(s->flags & CLIB_SOCKET_F_BLOCKING) &&
fcntl (s->fd, F_SETFL, O_NONBLOCK) < 0)
{
error = clib_error_return_unix (0, "fcntl NONBLOCK2 (fd %d, '%s')",
diff --git a/src/vppinfra/socket.h b/src/vppinfra/socket.h
index b5f005839e4..78a56fee53e 100644
--- a/src/vppinfra/socket.h
+++ b/src/vppinfra/socket.h
@@ -62,7 +62,7 @@ typedef struct _socket_t
#define CLIB_SOCKET_F_ALLOW_GROUP_WRITE (1 << 4)
#define CLIB_SOCKET_F_SEQPACKET (1 << 5)
#define CLIB_SOCKET_F_PASSCRED (1 << 6)
-
+#define CLIB_SOCKET_F_BLOCKING (1 << 7)
/* Transmit buffer. Holds data waiting to be written. */
u8 *tx_buffer;