Worker socket closed

Hello team,

I am having a small application which is used as a proxy for setting operational data. So below is my code to start the session.

if (confd_load_schemas((struct sockaddr*)&addr_,
					   sizeof (struct sockaddr_in)) != CONFD_OK)
{
	std::cerr << "Failed to load schemas from confd." << std::endl;
	return e_confd_failure;
}
if((dctx_ = confd_init_daemon(daemon_name_.c_str())) == NULL)
{
	std::cerr << "Failed to load schemas from confd." << std::endl;
	return e_confd_failure;
}
if(confd_connect(dctx_, ctlsock_, CONTROL_SOCKET, (struct sockaddr*)&addr_, sizeof(struct sockaddr)) < 0)
{
	std::cerr << "Failed to connect on control socket." << std::endl;
	return e_confd_failure;
}
if(confd_connect(dctx_, workersock_, WORKER_SOCKET, (struct sockaddr*)&addr_, sizeof(struct sockaddr)) < 0)
{
	std::cerr << "Failed to connect on worker socket." << std::endl;
	return e_confd_failure;
}

/* Register trans and data callbacks */
if (confd_register_trans_cb(dctx_, &trans_cbs_) == CONFD_ERR)
{
    std::cerr << "Failed to register trans cb." << std::endl;
    return e_confd_failure;
}
if (confd_register_data_cb(dctx_, &data_cbs_) == CONFD_ERR)
{
    std::cerr << "Failed to register data cb." << std::endl;
    return e_confd_failure;
}
if (confd_register_data_cb(dctx_, &discovered_ap_cbs_) == CONFD_ERR)
{
    std::cerr << "Failed to register discovered ap cb." << std::endl;
    return e_confd_failure;
}

/* several other callpoints registered */

if (confd_register_done(dctx_) != CONFD_OK)
{
    std::cerr << "Failed to complete registration." << std::endl;
    return e_confd_failure;
}

std::cout << "Waiting for events from confd." << std::endl;
/* Wait to hear from confd */
while(1)
{
	struct pollfd set[2];
	int ret;
	set[0].fd = ctlsock_;
	set[0].events = POLLIN;
	set[0].revents = 0;
	set[1].fd = workersock_;
	set[1].events = POLLIN;
	set[1].revents = 0;

	if (poll(set, sizeof(set)/sizeof(*set), -1) < 0)
	{
		perror("Poll failed:");
		continue;
	}

	/* Check for I/O */
	if (set[0].revents & POLLIN)
	{
		if ((ret = confd_fd_ready(dctx_, ctlsock_)) == CONFD_EOF)
		{
			std::cerr << "Control socket closed." << std::endl;
			return e_confd_failure;
		}
		else if (ret == CONFD_ERR && confd_errno != CONFD_ERR_EXTERNAL)
		{
			std::cerr << "Error on control socket request: %s (%d): %s" <<
				 confd_strerror(confd_errno) << confd_errno << confd_lasterr() << std::endl;
			return e_confd_failure;
		}
	}

	if (set[1].revents & POLLIN)
	{
		if ((ret = confd_fd_ready(dctx_, workersock_)) == CONFD_EOF)
		{
			std::cerr << "Worker socket closed." << std::endl;
			return e_confd_failure;
		}
		else if (ret == CONFD_ERR && confd_errno != CONFD_ERR_EXTERNAL)
		{
			std::cerr << "Error on control socket request: %s (%d): %s" <<
			 confd_strerror(confd_errno) << confd_errno << confd_lasterr() << std::endl;
			return e_confd_failure;
		}
	}
}	// While(1)

We have a list of entries and these call-points are registered for each of the AP. We have around 1000 such entries and at some time, we see the application closes with the below error,

"DEBUG EOF on socket to ConfD
Worker socket closed. "

Your assistance here would be very helpful. Thanks in advance.

Whenever ConfD closes a worker socket, the reason is printed to the developer log. Do you have the developer log enabled?

If you require further help to troubleshoot your particular issue, it is best to file a support ticket through our RT system.