Mark Linn wrote: > I am setting the O_NONBLOCK flag on a socket file descriptor using fcntl, > > will a read() on the socket return EINTR when the process get a signal?
By default, read() will restart itself automatically, regardless of whether the socket is blocking or not, as long as there is data to be read in the socket receive buffer. You can change this behavior by calling sigaction(). For example, the code below will make SIGTERM interrupt system calls. They will return an error code, usually -1, with the global errno set to EINTR. If the socket is non-blocking and the socket receive buffer is empty, then read() will also return an error, but with errno set to EWOULDBLOCK. #include <signal.h> struct sigaction sigact; sigact.sa_handler = sigterm_handler; sigemptyset( &sigact.sa_mask ); sigact.sa_flags = 0; if ( sigaction( SIGTERM, &sigact, NULL ) < 0 ) { perror( "sigaction()" ); exit( 1 ); } -- James Bailie <[EMAIL PROTECTED]> http://www.mammothcheese.ca _______________________________________________ freebsd-hackers@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To unsubscribe, send any mail to "[EMAIL PROTECTED]"