int pdes[2];
int err_pdes[2];
int pid;
+
if (socketpair (AF_UNIX, SOCK_STREAM, 0, pdes) < 0)
return -1;
if (socketpair (AF_UNIX, SOCK_STREAM, 0, err_pdes) < 0)
/* Child. */
if (pid == 0)
{
+ /* We don't want ^c to kill the connection. */
+#ifdef HAVE_SETSID
+ pid_t sid = setsid ();
+ if (sid == -1)
+ signal (SIGINT, SIG_IGN);
+#else
+ signal (SIGINT, SIG_IGN);
+#endif
+
/* re-wire pdes[1] to stdin/stdout */
close (pdes[0]);
if (pdes[1] != STDOUT_FILENO)
pipe_close (struct serial *scb)
{
struct pipe_state *state = scb->state;
+
if (state != NULL)
{
int pid = state->pid;
_initialize_ser_pipe (void)
{
struct serial_ops *ops = XMALLOC (struct serial_ops);
+
memset (ops, 0, sizeof (struct serial_ops));
ops->name = "pipe";
ops->next = 0;