All of lore.kernel.org
 help / color / mirror / Atom feed
* [Xenomai] Detecting closure of non-RT end of XDDP from userspace
@ 2015-02-27  7:27 Doug Brunner
  2015-03-02 10:24 ` Philippe Gerum
  0 siblings, 1 reply; 3+ messages in thread
From: Doug Brunner @ 2015-02-27  7:27 UTC (permalink / raw)
  To: Xenomai

Hi all,

I have a need for an RT task that communicates with Linux tasks through
XDDP to tell when the Linux process has closed /dev/rtpN. In this case the
RT task is acting as a server of sorts from which Linux processes retrieve
data, and if an ill-behaved Linux process dies, the RT task needs to clean
up its connection state in order to not flood the hapless Linux process
that connects next with all the data that built up in the XDDP buffers. I
would rather avoid implementing a heartbeat mechanism (RT task watches for
periodic "I'm alive" signal from Linux process), because of the many
moving parts this would introduce.

It looks like the information is there - xnpipe_state::status (please
forgive my C++ scoping operator :)) has a bit indicating whether the Linux
side is connected, XNPIPE_USER_CONN. I was thinking of adding a function
xnpipe_get_status, which retrieves the status word:

int xnpipe_get_status(int minor, unsigned long *out);

The XDDP getsockopt() can then return this information to userspace,
mirroring how Linux sockets behave (if I understand correctly):

int err;
getsockopt(fd, SOL_SOCKET, SO_ERROR, &err, sizeof(err));
if(err == 0) {
    /* socket is connected on Linux end */
}
else if(err == EPIPE) {
    /* socket is not connected on Linux end*/
}

One other possibility would be to add a socket option that, when set,
causes sendmsg() and recvmsg() to fail with EPIPE if the Linux end of the
pipe is not connected.

Does either/both of these seem like a good idea?

-- 
    Doug Brunner



^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2015-04-09  2:21 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-02-27  7:27 [Xenomai] Detecting closure of non-RT end of XDDP from userspace Doug Brunner
2015-03-02 10:24 ` Philippe Gerum
2015-04-09  2:21   ` Doug Brunner

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.