Date: Sun, 22 Feb 2004 15:36:34 -0800 From: "Chris Ochs" <freebsd@paymentonline.net> To: <freebsd-current@freebsd.org> Subject: Perl non blocking sockets on 5.2 Message-ID: <00f201c3f99c$b58a4ce0$b9042804@chris2>
next in thread | raw e-mail | index | archive | help
This code is from Cache::Memcached which is a perl interface to memcached.
It works as is on 4.9, but on 5.2-RC the connect returns undef unless I
comment out the calls to IO::Handle::blocking.
Seems like there is some socket behavior which is different in 5.x then 4.x
that would cause this. Anyone have any ideas?
Chris
------------------------------------------
sub _connect_sock { # sock, sin, timeout
my ($sock, $sin, $timeout) = @_;
$timeout ||= 0.25;
my $block = IO::Handle::blocking($sock, 0) if $timeout;
my $ret = connect($sock, $sin);
if (!$ret && $timeout && $!{'EINPROGRESS'}) {
my $win='';
vec($win, fileno($sock), 1) = 1;
if (select(undef, $win, undef, $timeout) > 0) {
$ret = connect($sock, $sin);
# EISCONN means connected & won't re-connect, so success
$ret = 1 if !$ret && $!{'EISCONN'};
}
}
IO::Handle::blocking($sock, $block) if $timeout;
return $ret;
}
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?00f201c3f99c$b58a4ce0$b9042804>
