diff options
author | schmidt <douglascraigschmidt@users.noreply.github.com> | 2006-09-25 16:34:03 +0000 |
---|---|---|
committer | schmidt <douglascraigschmidt@users.noreply.github.com> | 2006-09-25 16:34:03 +0000 |
commit | c36326b113c90a7b97b51baf73850abe17626aa2 (patch) | |
tree | 3a858c9a3eb660f38595c202e0c67e18148e0b73 | |
parent | 5062e7e87ec77a82a8c9c00f31ba03aa81c1ac88 (diff) | |
download | ATCD-c36326b113c90a7b97b51baf73850abe17626aa2.tar.gz |
ChangeLogTag:Mon
-rw-r--r-- | ACE/ChangeLog | 10 | ||||
-rw-r--r-- | ACE/ace/ACE.cpp | 4 |
2 files changed, 14 insertions, 0 deletions
diff --git a/ACE/ChangeLog b/ACE/ChangeLog index a63b483848b..83fe816a154 100644 --- a/ACE/ChangeLog +++ b/ACE/ChangeLog @@ -1,3 +1,13 @@ +Mon Sep 25 16:29:42 UTC 2006 Douglas C. Schmidt <schmidt@dre.vanderbilt.edu> + + * ace/ACE.cpp (send_n_i): Conditionally removed the check for + errno == ENOBUFS because Winsock send, or WSASend will try to + enqueue all buffer at once (to the kernel) and if not it will + return ENOBUFS, in which case the socket is always ready for + writing but actually winsock can never perform such write and we + have endless loop. Thanks to Aleksandar Vukajlovic <vukajlo at + finsoft dot co dot yu> for reporting this and suggesting a fix. + Mon Sep 25 11:39:35 UTC 2006 Boris Kolpackov <boris@codesynthesis.com> * ace/Bound_Ptr.inl: diff --git a/ACE/ace/ACE.cpp b/ACE/ace/ACE.cpp index 5367e60018d..ae6b1fb8031 100644 --- a/ACE/ace/ACE.cpp +++ b/ACE/ace/ACE.cpp @@ -1430,7 +1430,11 @@ ACE::send_n_i (ACE_HANDLE handle, if (n == -1) { // Check for possible blocking. +#if defined (ACE_WIN32) + if (errno == EWOULDBLOCK) // If enobufs no need to loop +#else if (errno == EWOULDBLOCK || errno == ENOBUFS) +#endif /* ACE_WIN32 */ { // Wait for the blocking to subside. int result = ACE::handle_write_ready (handle, |