Date: Sun, 8 Oct 1995 20:18:30 -0700 (PDT) From: Julian Elischer <julian@ref.tfs.com> To: raoul@cssc-syd.tansu.com.au (Raoul Golan) Cc: freebsd-questions@freebsd.org Subject: Re: Question on read syscall on serial port Message-ID: <199510090318.UAA14415@ref.tfs.com> In-Reply-To: <199510090119.LAA07559@kiwi.cssc-syd.tansu.com.au> from "Raoul Golan" at Oct 9, 95 11:19:40 am
next in thread | previous in thread | raw e-mail | index | archive | help
> > Hello people, > > I'm reading from a modem on /dev/cua*. It's a blocking read, > which means I expect it to wait there until data is available, > or until the modem loses carrier, or until an error occurs. > > At the moment, when the modem loses carrier, the read syscall > returns a count of 0 data read, but it does not set errno to > anything (it leaves errno with the same value it had before the > call). > > Is there any way (via an ioctl, a fcntl, an stty(?) or via some > modem configuration parameter) of having the read syscall put > some value into errno, such as ENOENT or EIO, when the modem > loses carrier? Returning 0 bytes on a blocking call is considered "Notification of EOF" This is the logical definition of loss of carrier is it not? you could arange to get a signal possibly.. (I'd have ot go back and look again).. > > I ask this because in the tip code there is a loop > that exits only once errno is set to these values. This > means that after the modem's lost carrier my tip session > fails to exit. > > The code is as follows: > > /* while some condition */ > > cnt = read(FD, buf, BUFSIZ); > if (cnt <= 0) { > /* lost carrier */ > if (cnt < 0 && errno == EIO) { > sigblock(sigmask(SIGTERM)); > intTERM(); > /*NOTREACHED*/ > } else if (cnt == 0 && errno == ENOENT) { > kill(getppid(),SIGUSR1); > sigblock(sigmask(SIGTERM)); > intTERM(); > /*NOTREACHED*/ > } else { > printf("%d %d\r",cnt,errno); > fflush(stdout); > } > continue; > } > /* end */ > > Thanks, > > Raoul. > hmm interesting.. lemme see what psix says.. (if anything...) nothing in read() hey are you openning cuax or ttyX?
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199510090318.UAA14415>