strncpy (sun.sun_path, (char *) vui->sock_filename,
sizeof (sun.sun_path) - 1);
+ /* Avoid hanging VPP if the other end does not accept */
+ fcntl(sockfd, F_SETFL, O_NONBLOCK);
if (connect (sockfd, (struct sockaddr *) &sun,
sizeof (struct sockaddr_un)) == 0)
{
+ /* Set the socket to blocking as it was before */
+ fcntl(sockfd, F_SETFL, 0);
vui->sock_errno = 0;
template.file_descriptor = sockfd;
template.private_data =
static void
vhost_user_term_if (vhost_user_intf_t * vui)
{
+ int q;
+
// Delete configured thread pinning
vec_reset_length (vui->workers);
// disconnect interface sockets
vhost_user_if_disconnect (vui);
vhost_user_update_iface_state (vui);
+ for (q = 0; q < VHOST_VRING_MAX_N; q++)
+ {
+ clib_mem_free ((void *) vui->vring_locks[q]);
+ }
+
if (vui->unix_server_index != ~0)
{
//Close server socket
int rv = 0;
int server_sock_fd = -1;
+ if (sock_filename == NULL || !(strlen (sock_filename) > 0))
+ {
+ return VNET_API_ERROR_INVALID_ARGUMENT;
+ }
+
if (is_server)
{
if ((rv =