use POSIX; use Fcntl; use sigtrap qw(die untrapped); sub SIGIO_Handler { my $signame = shift; print "Somebody sent me a SIG$signame\n"; } $SIG{IO} = \&SIGIO_Handler; $| = 1; open(LINK, "+getattr( fileno(LINK) ); my $c_cflag = $termios->getcflag; my $c_lflag = $termios->getlflag; $c_cflag |= (CLOCAL | CREAD | CS8); $c_cflag &= ~(PARENB); $c_cflag &= ~(CSTOPB); $c_cflag |= (CSIZE); $c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); $c_oflag &= ~(OPOST); $termios->setcc(VMIN, 0); $termios->setcc(VTIME, 10); $termios->setcflag($c_cflag); $termios->setlflag($c_lflag); $termios->setoflag($c_oflag); $termios->setispeed(B2400); $termios->setospeed(B2400); $termios->setattr( fileno(LINK), TCSAFLUSH); # -- Register "myself" ($$) to catch SIGIOs. fcntl(LINK, &Fcntl::F_SETOWN, $$); fcntl(LINK, F_SETFL, O_ASYNC); print LINK "AT\r"; while (1) { # -- Just wait and ... # -- see if any SIGIO arrives };