diff options
author | bustico | 2008-04-09 08:26:00 +0000 |
---|---|---|
committer | bustico | 2008-04-09 08:26:00 +0000 |
commit | 1d26727404cf9b8c10a30a5c1f90b3b7f04c8d5d (patch) | |
tree | 91609d39d60039b37cc4b20de35ebd1fcc3502d9 /Ivy.pm | |
parent | 01bcaaebe301ad63965229f8a0264c8bf701f0cd (diff) | |
download | ivy-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.pm | 11 |
1 files changed, 11 insertions, 0 deletions
@@ -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}) } } |