=over =item fcntl FILEHANDLE,FUNCTION,SCALAR X Implements the L function. You'll probably have to say use Fcntl; first to get the correct constant definitions. Argument processing and value returned work just like L|/ioctl FILEHANDLE,FUNCTION,SCALAR> below. For example: use Fcntl; my $flags = fcntl($filehandle, F_GETFL, 0) or die "Can't fcntl F_GETFL: $!"; You don't have to check for L|/defined EXPR> on the return from L|/fcntl FILEHANDLE,FUNCTION,SCALAR>. Like L|/ioctl FILEHANDLE,FUNCTION,SCALAR>, it maps a C<0> return from the system call into C<"0 but true"> in Perl. This string is true in boolean context and C<0> in numeric context. It is also exempt from the normal L|perldiag/Argument "%s" isn't numeric%s> L on improper numeric conversions. Note that L|/fcntl FILEHANDLE,FUNCTION,SCALAR> raises an exception if used on a machine that doesn't implement L. See the L module or your L manpage to learn what functions are available on your system. Here's an example of setting a filehandle named C<$REMOTE> to be non-blocking at the system level. You'll have to negotiate L>|perlvar/$E> on your own, though. use Fcntl qw(F_GETFL F_SETFL O_NONBLOCK); my $flags = fcntl($REMOTE, F_GETFL, 0) or die "Can't get flags for the socket: $!\n"; fcntl($REMOTE, F_SETFL, $flags | O_NONBLOCK) or die "Can't set flags for the socket: $!\n"; Portability issues: L. =back