eprintf("%s\n", dlerror());
eprintf("Cannot handle event %s\n", req->driver);
void ipc_event_handle(int accept_fd){	int fd, err;	char sbuf[4096], rbuf[4096];	struct nlmsghdr *nlh;	struct iovec iov;	struct msghdr msg;	struct tgtadm_res *res;	int (*fn) (char *, char *);	fd = ipc_accept(accept_fd);	if (fd < 0) {		eprintf("%d\n", fd);		return;	}	err = ipc_perm(fd);	if (err < 0)		goto fail;	memset(sbuf, 0, sizeof(sbuf));	memset(rbuf, 0, sizeof(rbuf));	nlh = (struct nlmsghdr *) sbuf;	iov.iov_base = nlh;	iov.iov_len = NLMSG_ALIGN(sizeof(struct nlmsghdr));	memset(&msg, 0, sizeof(msg));	msg.msg_iov = &iov;	msg.msg_iovlen = 1;	err = recvmsg(fd, &msg, MSG_PEEK);	if (err != NLMSG_ALIGN(sizeof(struct nlmsghdr))) {		err = -EIO;		goto fail;	}	iov.iov_base = nlh;	iov.iov_len = NLMSG_ALIGN(nlh->nlmsg_len);	memset(&msg, 0, sizeof(msg));	msg.msg_iov = &iov;	msg.msg_iovlen = 1;	err = recvmsg(fd, &msg, MSG_DONTWAIT);	if (err < 0)		goto fail;	eprintf("%s %d %d %d\n", __FUNCTION__, __LINE__, err, nlh->nlmsg_len);	fn = dlsym(dl_handles[0], "ipc_mgmt");	if (!fn) {		eprintf("%s\n", dlerror());		err = -EINVAL;		goto fail;	}	err = fn((char *) nlh, rbuf);send:	err = write(fd, nlh, nlh->nlmsg_len);	if (fd > 0)		close(fd);	if (err < 0)		eprintf("%d\n", err);	return;fail:	nlh = (struct nlmsghdr *) rbuf;	res = NLMSG_DATA(nlh);	res->err = err;	nlh->nlmsg_len = NLMSG_LENGTH(0);	goto send;}