sysfail "failed to set close-on-exec: $!";
}
+sub set_nonblock ($) {
+ my ($fh) = @_;
+ my $f = fcntl $fh, F_GETFL, 0 or sysfail "failed to get file flags: $!";
+ fcntl $fh, F_SETFL, $f | O_NONBLOCK or
+ sysfail "failed to set non-blockingness: $!";
+}
+
sub lockedp ($) {
my ($f) = @_;
my $l = new File::FcntlLock;
for my $a (@{$s->{"_laddrs"}}) {
socket my $sk, PF_UNIX, SOCK_STREAM, 0
or sysfail "failed to make Unix-domain socket: $!";
- set_cloexec $sk;
+ set_cloexec $sk; set_nonblock $sk;
my $sa = "$SESSDIR/noip-client/$a";
bind $sk, sockaddr_un $sa
or sysfail "failed to bind Unix-domain socket to `$sa': $!";
my ($s, $a, $sk) = @{$SERVMAP{$fd}};
my $nsk;
unless (accept $nsk, $sk) {
- moan "failed to accept new connection: $!";
+ moan "failed to accept new connection: $!"
+ unless $! == EAGAIN || $! == EWOULDBLOCK;
next FD;
}
set_cloexec $nsk;