Ensure that the fd returned by the connect method is closed before running external programs. http://article.gmane.org/gmane.linux.ppp/1371 diff -ruNp ppp.orig/pppd/main.c ppp/pppd/main.c --- ppp.orig/pppd/main.c 2004-07-12 12:55:30.000000000 +0200 +++ ppp/pppd/main.c 2004-07-12 12:55:25.000000000 +0200 @@ -1662,6 +1662,8 @@ run_program(prog, args, must_exist, done closelog(); if (the_channel->close) (*the_channel->close)(); + else + close(devfd); /* Don't pass handles to the PPP device, even by accident. */ dup2(fd_devnull, 0);