Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 10 Oct 1999 21:36:05 -0700 (PDT)
From:      Alfred Perlstein <bright@wintelcom.net>
To:        Zhihui Zhang <zzhang@cs.binghamton.edu>
Cc:        freebsd-hackers@FreeBSD.ORG
Subject:   Re: How to prevent a system call from restart?
Message-ID:  <Pine.BSF.4.05.9910102134440.8080-100000@fw.wintelcom.net>
In-Reply-To: <Pine.GSO.3.96.991010150931.28616A-100000@sol.cs.binghamton.edu>

next in thread | previous in thread | raw e-mail | index | archive | help

On Sun, 10 Oct 1999, Zhihui Zhang wrote:

> 
> I modify the day time client program from the Stevens' book and run it on
> both a Sun workstation and a FreeBSD machine.  In the program, I use
> signal() and alarm() to set a 5 seconds timeout.  The program works as
> expected on Sun (after I comment out the daytime line in the file
> /etc/inetd.conf) but not on the FreeBSD machine. 
> 
> Later I find out that the reason maybe the recvfrom() restarts
> *automatically* in FreeBSD.  Why the default behaviour is different from
> SunOS? If I am correct about the reason, can anyone tell me how to prevent
> the recvfrom() from restart after receiving the SIGALRM signal? 
> 
> By the way, I also try the socket timeout option.  It works immediately.
> 
> Any help is appreciated.

from sigaction's manpage:

     If a signal is caught during the system calls listed below, the call may
     be forced to terminate with the error EINTR, the call may return with a
     data transfer shorter than requested, or the call may be restarted.
     Restart of pending calls is requested by setting the SA_RESTART bit in
     sa_flags. The affected system calls include open(2),  read(2),  write(2),
      sendto(2),  recvfrom(2),  sendmsg(2) and recvmsg(2) on a communications
     channel or a slow device (such as a terminal, but not a regular file) and
     during a wait(2) or ioctl(2).  However, calls that have already committed
     are not restarted, but instead return a partial success (for example, a
     short read count).

you want to turn off SA_RESTART.

-Alfred Perlstein - [bright@rush.net|alfred@freebsd.org]
Wintelcom systems administrator and programmer
   - http://www.wintelcom.net/ [bright@wintelcom.net]




To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.05.9910102134440.8080-100000>