{
clib_memset (sock, 0, sizeof(clib_socket_t));
sock->config = (char *) msf->filename;
- sock->flags = CLIB_SOCKET_F_IS_CLIENT| CLIB_SOCKET_F_SEQPACKET;
+ sock->flags = CLIB_SOCKET_F_IS_CLIENT | CLIB_SOCKET_F_SEQPACKET |
+ CLIB_SOCKET_F_BLOCKING;
- if ((err = clib_socket_init (sock)))
+ if ((err = clib_socket_init (sock)))
{
clib_error_free (err);
}
int rv = 0;
cs->config = (char *) vcm->cfg.vpp_app_socket_api;
- cs->flags = CLIB_SOCKET_F_IS_CLIENT | CLIB_SOCKET_F_SEQPACKET;
+ cs->flags =
+ CLIB_SOCKET_F_IS_CLIENT | CLIB_SOCKET_F_SEQPACKET | CLIB_SOCKET_F_BLOCKING;
wrk->vcl_needs_real_epoll = 1;
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')",
#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;