summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbustico2008-04-09 08:26:00 +0000
committerbustico2008-04-09 08:26:00 +0000
commit1d26727404cf9b8c10a30a5c1f90b3b7f04c8d5d (patch)
tree91609d39d60039b37cc4b20de35ebd1fcc3502d9
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
-rw-r--r--Ivy.pm11
-rw-r--r--test.pl2
2 files changed, 12 insertions, 1 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})
}
}
diff --git a/test.pl b/test.pl
index 53567de..32b7a50 100644
--- a/test.pl
+++ b/test.pl
@@ -19,6 +19,6 @@ print "ok 1\n";
# of the test code):
Ivy->init(-loopMode => 'LOCAL',
-appName => 'testivy',
- -ivyBus => '127.255.255.2552508');
+ -ivyBus => '127.255.255.255:2508');
1;