summaryrefslogtreecommitdiff
path: root/Ivy.pm
diff options
context:
space:
mode:
authorbustico2008-04-09 08:26:00 +0000
committerbustico2008-04-09 08:26:00 +0000
commit1d26727404cf9b8c10a30a5c1f90b3b7f04c8d5d (patch)
tree91609d39d60039b37cc4b20de35ebd1fcc3502d9 /Ivy.pm
parent01bcaaebe301ad63965229f8a0264c8bf701f0cd (diff)
downloadivy-perl-1d26727404cf9b8c10a30a5c1f90b3b7f04c8d5d.zip
ivy-perl-1d26727404cf9b8c10a30a5c1f90b3b7f04c8d5d.tar.gz
ivy-perl-1d26727404cf9b8c10a30a5c1f90b3b7f04c8d5d.tar.bz2
ivy-perl-1d26727404cf9b8c10a30a5c1f90b3b7f04c8d5d.tar.xz
* fix a bug with the behavior of send system call in non blocking mode
in some rare case
Diffstat (limited to 'Ivy.pm')
-rw-r--r--Ivy.pm11
1 files changed, 11 insertions, 0 deletions
diff --git a/Ivy.pm b/Ivy.pm
index 854bffe..05fa108 100644
--- a/Ivy.pm
+++ b/Ivy.pm
@@ -1940,6 +1940,17 @@ sub _univSend ($$$)
select (undef, $win, undef, undef);
}
} else {
+ if ($!{EWOULDBLOCK}) {
+ # Aucun octet n'a été envoyé, mais le send ne rend pas 0
+ # car 0 peut être une longueur passée au send, donc dans ce cas
+ # send renvoie -1 et met errno a EWOULDBLOCK
+ _callCongestionCb ($self, $fd, 1);
+ if ($self->[blockOnSlowAgent]) {
+ my $win = '';
+ vec($win, fileno ($fd), 1) = 1;
+ select (undef, $win, undef, undef);
+ }
+ }
$self->_removeFileDescriptor ($fd, '_univSend') unless ($!{EAGAIN} || $!{EWOULDBLOCK}|| $!{EINTR} || $!{EMSGSIZE} || $!{ENOBUFS})
}
}