Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r58883 - in branches/release: . boost boost/algorithm/string boost/archive boost/asio boost/asio/detail boost/asio/impl boost/asio/ip boost/asio/local boost/config boost/filesystem boost/fusion boost/graph boost/integer boost/interprocess boost/intrusive boost/math boost/numeric/ublas boost/property_tree boost/python boost/regex boost/serialization boost/signals boost/signals2 boost/spirit boost/spirit/home boost/spirit/home/karma boost/spirit/home/support boost/statechart boost/system boost/thread boost/tr1 boost/type_traits boost/utility boost/variant boost/wave doc libs libs/asio/example/porthopper libs/asio/test libs/config libs/filesystem libs/fusion libs/graph_parallel libs/integer libs/interprocess libs/intrusive libs/math libs/mpl/doc/refmanual libs/mpl/doc/src/refmanual libs/numeric/ublas libs/numeric/ublas/doc libs/property_tree libs/python libs/regex libs/regex/doc libs/serialization libs/signals libs/signals2 libs/spirit libs/spirit/classic/example libs/spirit/doc libs/spirit/example libs/spirit/phoenix libs/spirit/test libs/spirit/test/qi libs/statechart libs/static_assert libs/system libs/thread libs/thread/doc libs/timer libs/tr1 libs/type_traits libs/utility libs/wave more people status tools tools/bcp tools/build/v2 tools/inspect tools/quickbook tools/regression tools/release tools/wave wiki
From: chris_at_[hidden]
Date: 2010-01-10 21:34:06


Author: chris_kohlhoff
Date: 2010-01-10 21:34:00 EST (Sun, 10 Jan 2010)
New Revision: 58883
URL: http://svn.boost.org/trac/boost/changeset/58883

Log:
Merge from trunk. Fixes #3743, #3670, #3822.

........
  r58670 | chris_kohlhoff | 2010-01-04 23:33:04 +1100 (Mon, 04 Jan 2010) | 2 lines
  
  Fix example to compile with MSVC 10 beta 2.
........
  r58671 | chris_kohlhoff | 2010-01-04 23:33:42 +1100 (Mon, 04 Jan 2010) | 2 lines
  
  Fix Win64 warnings.
........
  r58703 | chris_kohlhoff | 2010-01-05 22:51:41 +1100 (Tue, 05 Jan 2010) | 3 lines
  
  Include boost/limits.hpp rather than <limits>, to support older compilers.
  Refs #3743.
........
  r58704 | chris_kohlhoff | 2010-01-05 23:20:10 +1100 (Tue, 05 Jan 2010) | 2 lines
  
  Drop back to second_clock if microsec_clock is unavailable. Refs #3743.
........
  r58705 | chris_kohlhoff | 2010-01-05 23:50:39 +1100 (Tue, 05 Jan 2010) | 2 lines
  
  Use sockatmark if SIOCATMARK is not defined. Refs #3743.
........
  r58740 | chris_kohlhoff | 2010-01-06 13:38:39 +1100 (Wed, 06 Jan 2010) | 2 lines
  
  Use buffer debugging workaround with MSVC 8 only.
........
  r58761 | chris_kohlhoff | 2010-01-06 23:27:05 +1100 (Wed, 06 Jan 2010) | 2 lines
  
  Disable iostreams-related functionality if BOOST_NO_IOSTREAMS is defined. Refs #3743.
........
  r58762 | chris_kohlhoff | 2010-01-06 23:36:51 +1100 (Wed, 06 Jan 2010) | 2 lines
  
  Apply fix for reported excessive CPU usage under Solaris. Refs #3670.
........
  r58782 | chris_kohlhoff | 2010-01-07 09:44:48 +1100 (Thu, 07 Jan 2010) | 2 lines
  
  Disable handler allocation and invocation hooks on g++ 2.x. Refs #3743.
........
  r58793 | chris_kohlhoff | 2010-01-08 09:18:16 +1100 (Fri, 08 Jan 2010) | 2 lines
  
  Support platforms that don't define INET6_ADDRSTRLEN. Refs #3743.
........

Properties modified:
   branches/release/ (props changed)
   branches/release/CMakeLists.txt (props changed)
   branches/release/INSTALL (props changed)
   branches/release/Jamroot (props changed)
   branches/release/LICENSE_1_0.txt (props changed)
   branches/release/boost/ (props changed)
   branches/release/boost-build.jam (props changed)
   branches/release/boost.css (props changed)
   branches/release/boost.png (props changed)
   branches/release/boost/algorithm/string/ (props changed)
   branches/release/boost/archive/ (props changed)
   branches/release/boost/config/ (props changed)
   branches/release/boost/filesystem/ (props changed)
   branches/release/boost/fusion/ (props changed)
   branches/release/boost/graph/ (props changed)
   branches/release/boost/integer/ (props changed)
   branches/release/boost/interprocess/ (props changed)
   branches/release/boost/intrusive/ (props changed)
   branches/release/boost/math/ (props changed)
   branches/release/boost/numeric/ublas/ (props changed)
   branches/release/boost/property_tree/ (props changed)
   branches/release/boost/python/ (props changed)
   branches/release/boost/regex/ (props changed)
   branches/release/boost/serialization/ (props changed)
   branches/release/boost/signals/ (props changed)
   branches/release/boost/signals2/ (props changed)
   branches/release/boost/spirit/ (props changed)
   branches/release/boost/spirit/home/ (props changed)
   branches/release/boost/spirit/home/karma/ (props changed)
   branches/release/boost/spirit/home/support/attributes.hpp (props changed)
   branches/release/boost/statechart/ (props changed)
   branches/release/boost/system/ (props changed)
   branches/release/boost/thread/ (props changed)
   branches/release/boost/thread.hpp (props changed)
   branches/release/boost/tr1/ (props changed)
   branches/release/boost/type_traits/ (props changed)
   branches/release/boost/utility/value_init.hpp (props changed)
   branches/release/boost/variant/ (props changed)
   branches/release/boost/version.hpp (props changed)
   branches/release/boost/wave/ (props changed)
   branches/release/bootstrap.bat (props changed)
   branches/release/bootstrap.sh (props changed)
   branches/release/doc/ (props changed)
   branches/release/index.htm (props changed)
   branches/release/index.html (props changed)
   branches/release/libs/ (props changed)
   branches/release/libs/config/ (props changed)
   branches/release/libs/filesystem/ (props changed)
   branches/release/libs/fusion/ (props changed)
   branches/release/libs/graph_parallel/ (props changed)
   branches/release/libs/integer/ (props changed)
   branches/release/libs/interprocess/ (props changed)
   branches/release/libs/intrusive/ (props changed)
   branches/release/libs/libraries.htm (props changed)
   branches/release/libs/maintainers.txt (props changed)
   branches/release/libs/math/ (props changed)
   branches/release/libs/mpl/doc/refmanual/broken-compiler-workarounds.html (props changed)
   branches/release/libs/mpl/doc/refmanual/categorized-index-concepts.html (props changed)
   branches/release/libs/mpl/doc/refmanual/cfg-no-preprocessed-headers.html (props changed)
   branches/release/libs/mpl/doc/refmanual/composition-and-argument-binding.html (props changed)
   branches/release/libs/mpl/doc/refmanual/data-types-concepts.html (props changed)
   branches/release/libs/mpl/doc/refmanual/data-types-miscellaneous.html (props changed)
   branches/release/libs/mpl/doc/refmanual/extensible-associative-sequence.html (props changed)
   branches/release/libs/mpl/doc/refmanual/inserter-class.html (props changed)
   branches/release/libs/mpl/doc/refmanual/tag-dispatched-metafunction.html (props changed)
   branches/release/libs/mpl/doc/refmanual/trivial-metafunctions-summary.html (props changed)
   branches/release/libs/mpl/doc/src/refmanual/Iterators-Iterator.rst (props changed)
   branches/release/libs/numeric/ublas/ (props changed)
   branches/release/libs/numeric/ublas/doc/ (props changed)
   branches/release/libs/property_tree/ (props changed)
   branches/release/libs/python/ (props changed)
   branches/release/libs/regex/ (props changed)
   branches/release/libs/regex/doc/ (props changed)
   branches/release/libs/serialization/ (props changed)
   branches/release/libs/signals/ (props changed)
   branches/release/libs/signals2/ (props changed)
   branches/release/libs/spirit/ (props changed)
   branches/release/libs/spirit/classic/example/ (props changed)
   branches/release/libs/spirit/doc/ (props changed)
   branches/release/libs/spirit/example/ (props changed)
   branches/release/libs/spirit/phoenix/ (props changed)
   branches/release/libs/spirit/test/ (props changed)
   branches/release/libs/spirit/test/qi/optional.cpp (props changed)
   branches/release/libs/statechart/ (props changed)
   branches/release/libs/static_assert/ (props changed)
   branches/release/libs/system/ (props changed)
   branches/release/libs/thread/ (props changed)
   branches/release/libs/thread/doc/ (props changed)
   branches/release/libs/timer/ (props changed)
   branches/release/libs/tr1/ (props changed)
   branches/release/libs/type_traits/ (props changed)
   branches/release/libs/utility/swap.html (props changed)
   branches/release/libs/utility/value_init.htm (props changed)
   branches/release/libs/utility/value_init_test.cpp (props changed)
   branches/release/libs/wave/ (props changed)
   branches/release/more/ (props changed)
   branches/release/people/ (props changed)
   branches/release/rst.css (props changed)
   branches/release/status/ (props changed)
   branches/release/tools/ (props changed)
   branches/release/tools/bcp/ (props changed)
   branches/release/tools/build/v2/ (props changed)
   branches/release/tools/inspect/ (props changed)
   branches/release/tools/quickbook/ (props changed)
   branches/release/tools/regression/ (props changed)
   branches/release/tools/release/ (props changed)
   branches/release/tools/wave/ (props changed)
   branches/release/wiki/ (props changed)
Text files modified:
   branches/release/boost/asio/basic_socket_iostream.hpp | 8 ++++++++
   branches/release/boost/asio/basic_socket_streambuf.hpp | 8 ++++++++
   branches/release/boost/asio/basic_streambuf.hpp | 10 +++++++++-
   branches/release/boost/asio/buffer.hpp | 8 +++-----
   branches/release/boost/asio/detail/buffer_resize_guard.hpp | 2 +-
   branches/release/boost/asio/detail/consuming_buffers.hpp | 2 +-
   branches/release/boost/asio/detail/dev_poll_reactor.hpp | 1 -
   branches/release/boost/asio/detail/handler_alloc_helpers.hpp | 6 ++++--
   branches/release/boost/asio/detail/handler_invoke_helpers.hpp | 3 ++-
   branches/release/boost/asio/detail/reactive_socket_service.hpp | 13 +++++++++++--
   branches/release/boost/asio/detail/socket_types.hpp | 4 ++++
   branches/release/boost/asio/detail/timer_queue.hpp | 2 +-
   branches/release/boost/asio/detail/win_iocp_io_service.hpp | 8 ++++----
   branches/release/boost/asio/impl/io_service.ipp | 2 +-
   branches/release/boost/asio/impl/read.ipp | 8 ++++++++
   branches/release/boost/asio/impl/read_at.ipp | 8 ++++++++
   branches/release/boost/asio/impl/read_until.ipp | 2 +-
   branches/release/boost/asio/impl/write.ipp | 8 ++++++++
   branches/release/boost/asio/impl/write_at.ipp | 8 ++++++++
   branches/release/boost/asio/ip/address.hpp | 9 ++++++++-
   branches/release/boost/asio/ip/address_v4.hpp | 8 ++++++++
   branches/release/boost/asio/ip/address_v6.hpp | 8 ++++++++
   branches/release/boost/asio/ip/basic_endpoint.hpp | 15 +++++++++++----
   branches/release/boost/asio/ip/tcp.hpp | 2 ++
   branches/release/boost/asio/local/stream_protocol.hpp | 2 ++
   branches/release/boost/asio/read.hpp | 8 ++++++++
   branches/release/boost/asio/read_at.hpp | 8 ++++++++
   branches/release/boost/asio/read_until.hpp | 9 ++++++++-
   branches/release/boost/asio/streambuf.hpp | 4 ++++
   branches/release/boost/asio/time_traits.hpp | 4 ++++
   branches/release/boost/asio/write.hpp | 8 ++++++++
   branches/release/boost/asio/write_at.hpp | 8 ++++++++
   branches/release/libs/asio/example/porthopper/client.cpp | 6 +++---
   branches/release/libs/asio/test/deadline_timer.cpp | 4 ++++
   34 files changed, 184 insertions(+), 30 deletions(-)

Modified: branches/release/boost/asio/basic_socket_iostream.hpp
==============================================================================
--- branches/release/boost/asio/basic_socket_iostream.hpp (original)
+++ branches/release/boost/asio/basic_socket_iostream.hpp 2010-01-10 21:34:00 EST (Sun, 10 Jan 2010)
@@ -18,6 +18,12 @@
 #include <boost/asio/detail/push_options.hpp>
 
 #include <boost/asio/detail/push_options.hpp>
+#include <boost/config.hpp>
+#include <boost/asio/detail/pop_options.hpp>
+
+#if !defined(BOOST_NO_IOSTREAM)
+
+#include <boost/asio/detail/push_options.hpp>
 #include <boost/preprocessor/arithmetic/inc.hpp>
 #include <boost/preprocessor/repetition/enum_binary_params.hpp>
 #include <boost/preprocessor/repetition/enum_params.hpp>
@@ -145,6 +151,8 @@
 #undef BOOST_ASIO_PRIVATE_CTR_DEF
 #undef BOOST_ASIO_PRIVATE_CONNECT_DEF
 
+#endif // defined(BOOST_NO_IOSTREAM)
+
 #include <boost/asio/detail/pop_options.hpp>
 
 #endif // BOOST_ASIO_BASIC_SOCKET_IOSTREAM_HPP

Modified: branches/release/boost/asio/basic_socket_streambuf.hpp
==============================================================================
--- branches/release/boost/asio/basic_socket_streambuf.hpp (original)
+++ branches/release/boost/asio/basic_socket_streambuf.hpp 2010-01-10 21:34:00 EST (Sun, 10 Jan 2010)
@@ -18,6 +18,12 @@
 #include <boost/asio/detail/push_options.hpp>
 
 #include <boost/asio/detail/push_options.hpp>
+#include <boost/config.hpp>
+#include <boost/asio/detail/pop_options.hpp>
+
+#if !defined(BOOST_NO_IOSTREAM)
+
+#include <boost/asio/detail/push_options.hpp>
 #include <streambuf>
 #include <boost/array.hpp>
 #include <boost/preprocessor/arithmetic/inc.hpp>
@@ -282,6 +288,8 @@
 
 #undef BOOST_ASIO_PRIVATE_CONNECT_DEF
 
+#endif // !defined(BOOST_NO_IOSTREAM)
+
 #include <boost/asio/detail/pop_options.hpp>
 
 #endif // BOOST_ASIO_BASIC_SOCKET_STREAMBUF_HPP

Modified: branches/release/boost/asio/basic_streambuf.hpp
==============================================================================
--- branches/release/boost/asio/basic_streambuf.hpp (original)
+++ branches/release/boost/asio/basic_streambuf.hpp 2010-01-10 21:34:00 EST (Sun, 10 Jan 2010)
@@ -18,13 +18,19 @@
 #include <boost/asio/detail/push_options.hpp>
 
 #include <boost/asio/detail/push_options.hpp>
+#include <boost/config.hpp>
+#include <boost/asio/detail/pop_options.hpp>
+
+#if !defined(BOOST_NO_IOSTREAM)
+
+#include <boost/asio/detail/push_options.hpp>
 #include <algorithm>
 #include <cstring>
-#include <limits>
 #include <memory>
 #include <stdexcept>
 #include <streambuf>
 #include <vector>
+#include <boost/limits.hpp>
 #include <boost/throw_exception.hpp>
 #include <boost/asio/detail/pop_options.hpp>
 
@@ -339,4 +345,6 @@
 
 #include <boost/asio/detail/pop_options.hpp>
 
+#endif // !defined(BOOST_NO_IOSTREAM)
+
 #endif // BOOST_ASIO_BASIC_STREAMBUF_HPP

Modified: branches/release/boost/asio/buffer.hpp
==============================================================================
--- branches/release/boost/asio/buffer.hpp (original)
+++ branches/release/boost/asio/buffer.hpp 2010-01-10 21:34:00 EST (Sun, 10 Jan 2010)
@@ -432,14 +432,12 @@
 
   ~buffer_debug_check()
   {
-#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) \
- && BOOST_WORKAROUND(BOOST_MSVC, < 1600)
- // MSVC's string iterator checking may crash in a std::string::iterator
+#if BOOST_WORKAROUND(BOOST_MSVC, == 1400)
+ // MSVC 8's string iterator checking may crash in a std::string::iterator
     // object's destructor when the iterator points to an already-destroyed
     // std::string object, unless the iterator is cleared first.
     iter_ = Iterator();
-#endif // BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
- // && BOOST_WORKAROUND(BOOST_MSVC, < 1600)
+#endif // BOOST_WORKAROUND(BOOST_MSVC, == 1400)
   }
 
   void operator()()

Modified: branches/release/boost/asio/detail/buffer_resize_guard.hpp
==============================================================================
--- branches/release/boost/asio/detail/buffer_resize_guard.hpp (original)
+++ branches/release/boost/asio/detail/buffer_resize_guard.hpp 2010-01-10 21:34:00 EST (Sun, 10 Jan 2010)
@@ -18,8 +18,8 @@
 #include <boost/asio/detail/push_options.hpp>
 
 #include <boost/asio/detail/push_options.hpp>
-#include <limits>
 #include <boost/config.hpp>
+#include <boost/limits.hpp>
 #include <boost/asio/detail/pop_options.hpp>
 
 namespace boost {

Modified: branches/release/boost/asio/detail/consuming_buffers.hpp
==============================================================================
--- branches/release/boost/asio/detail/consuming_buffers.hpp (original)
+++ branches/release/boost/asio/detail/consuming_buffers.hpp 2010-01-10 21:34:00 EST (Sun, 10 Jan 2010)
@@ -20,9 +20,9 @@
 #include <boost/asio/detail/push_options.hpp>
 #include <algorithm>
 #include <cstddef>
-#include <limits>
 #include <boost/config.hpp>
 #include <boost/iterator/iterator_facade.hpp>
+#include <boost/limits.hpp>
 #include <boost/asio/detail/pop_options.hpp>
 
 #include <boost/asio/buffer.hpp>

Modified: branches/release/boost/asio/detail/dev_poll_reactor.hpp
==============================================================================
--- branches/release/boost/asio/detail/dev_poll_reactor.hpp (original)
+++ branches/release/boost/asio/detail/dev_poll_reactor.hpp 2010-01-10 21:34:00 EST (Sun, 10 Jan 2010)
@@ -435,7 +435,6 @@
           more_writes = write_op_queue_.has_operation(descriptor);
 
         if ((events[i].events & (POLLERR | POLLHUP)) != 0
- && (events[i].events & ~(POLLERR | POLLHUP)) == 0
               && !more_except && !more_reads && !more_writes)
         {
           // If we have an event and no operations associated with the

Modified: branches/release/boost/asio/detail/handler_alloc_helpers.hpp
==============================================================================
--- branches/release/boost/asio/detail/handler_alloc_helpers.hpp (original)
+++ branches/release/boost/asio/detail/handler_alloc_helpers.hpp 2010-01-10 21:34:00 EST (Sun, 10 Jan 2010)
@@ -33,7 +33,8 @@
 template <typename Handler>
 inline void* allocate(std::size_t s, Handler& h)
 {
-#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) \
+ || BOOST_WORKAROUND(__GNUC__, < 3)
   return ::operator new(s);
 #else
   using namespace boost::asio;
@@ -44,7 +45,8 @@
 template <typename Handler>
 inline void deallocate(void* p, std::size_t s, Handler& h)
 {
-#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) \
+ || BOOST_WORKAROUND(__GNUC__, < 3)
   ::operator delete(p);
 #else
   using namespace boost::asio;

Modified: branches/release/boost/asio/detail/handler_invoke_helpers.hpp
==============================================================================
--- branches/release/boost/asio/detail/handler_invoke_helpers.hpp (original)
+++ branches/release/boost/asio/detail/handler_invoke_helpers.hpp 2010-01-10 21:34:00 EST (Sun, 10 Jan 2010)
@@ -32,7 +32,8 @@
 template <typename Function, typename Context>
 inline void invoke(const Function& function, Context& context)
 {
-#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) \
+ || BOOST_WORKAROUND(__GNUC__, < 3)
   Function tmp(function);
   tmp();
 #else

Modified: branches/release/boost/asio/detail/reactive_socket_service.hpp
==============================================================================
--- branches/release/boost/asio/detail/reactive_socket_service.hpp (original)
+++ branches/release/boost/asio/detail/reactive_socket_service.hpp 2010-01-10 21:34:00 EST (Sun, 10 Jan 2010)
@@ -275,12 +275,21 @@
       return false;
     }
 
+#if defined(SIOCATMARK)
     boost::asio::detail::ioctl_arg_type value = 0;
     socket_ops::ioctl(impl.socket_, SIOCATMARK, &value, ec);
-#if defined(ENOTTY)
+# if defined(ENOTTY)
     if (ec.value() == ENOTTY)
       ec = boost::asio::error::not_socket;
-#endif // defined(ENOTTY)
+# endif // defined(ENOTTY)
+#else // defined(SIOCATMARK)
+ int value = sockatmark(impl.socket_);
+ if (value == -1)
+ ec = boost::system::error_code(errno,
+ boost::asio::error::get_system_category());
+ else
+ ec = boost::system::error_code();
+#endif // defined(SIOCATMARK)
     return ec ? false : value != 0;
   }
 

Modified: branches/release/boost/asio/detail/socket_types.hpp
==============================================================================
--- branches/release/boost/asio/detail/socket_types.hpp (original)
+++ branches/release/boost/asio/detail/socket_types.hpp 2010-01-10 21:34:00 EST (Sun, 10 Jan 2010)
@@ -163,7 +163,11 @@
 const int invalid_socket = -1;
 const int socket_error_retval = -1;
 const int max_addr_v4_str_len = INET_ADDRSTRLEN;
+#if defined(INET6_ADDRSTRLEN)
 const int max_addr_v6_str_len = INET6_ADDRSTRLEN + 1 + IF_NAMESIZE;
+#else // defined(INET6_ADDRSTRLEN)
+const int max_addr_v6_str_len = 256;
+#endif // defined(INET6_ADDRSTRLEN)
 typedef sockaddr socket_addr_type;
 typedef in_addr in4_addr_type;
 # if defined(__hpux)

Modified: branches/release/boost/asio/detail/timer_queue.hpp
==============================================================================
--- branches/release/boost/asio/detail/timer_queue.hpp (original)
+++ branches/release/boost/asio/detail/timer_queue.hpp 2010-01-10 21:34:00 EST (Sun, 10 Jan 2010)
@@ -20,10 +20,10 @@
 #include <boost/asio/detail/push_options.hpp>
 #include <cstddef>
 #include <functional>
-#include <limits>
 #include <memory>
 #include <vector>
 #include <boost/config.hpp>
+#include <boost/limits.hpp>
 #include <boost/asio/detail/pop_options.hpp>
 
 #include <boost/asio/error.hpp>

Modified: branches/release/boost/asio/detail/win_iocp_io_service.hpp
==============================================================================
--- branches/release/boost/asio/detail/win_iocp_io_service.hpp (original)
+++ branches/release/boost/asio/detail/win_iocp_io_service.hpp 2010-01-10 21:34:00 EST (Sun, 10 Jan 2010)
@@ -22,7 +22,7 @@
 #if defined(BOOST_ASIO_HAS_IOCP)
 
 #include <boost/asio/detail/push_options.hpp>
-#include <limits>
+#include <boost/limits.hpp>
 #include <boost/throw_exception.hpp>
 #include <boost/system/system_error.hpp>
 #include <boost/asio/detail/pop_options.hpp>
@@ -95,13 +95,13 @@
         iocp_service_.post_completion(this, last_error_, bytes_transferred_);
     }
 
- void on_immediate_completion(DWORD last_error, size_t bytes_transferred)
+ void on_immediate_completion(DWORD last_error, DWORD bytes_transferred)
     {
       ready_ = 1;
       iocp_service_.post_completion(this, last_error, bytes_transferred);
     }
 
- bool on_completion(DWORD last_error, size_t bytes_transferred)
+ bool on_completion(DWORD last_error, DWORD bytes_transferred)
     {
       if (last_error_ == ~DWORD(0))
       {
@@ -134,7 +134,7 @@
     win_iocp_io_service& iocp_service_;
     long ready_;
     DWORD last_error_;
- std::size_t bytes_transferred_;
+ DWORD bytes_transferred_;
     invoke_func_type invoke_func_;
     destroy_func_type destroy_func_;
   };

Modified: branches/release/boost/asio/impl/io_service.ipp
==============================================================================
--- branches/release/boost/asio/impl/io_service.ipp (original)
+++ branches/release/boost/asio/impl/io_service.ipp 2010-01-10 21:34:00 EST (Sun, 10 Jan 2010)
@@ -18,7 +18,7 @@
 #include <boost/asio/detail/push_options.hpp>
 
 #include <boost/asio/detail/push_options.hpp>
-#include <limits>
+#include <boost/limits.hpp>
 #include <boost/asio/detail/pop_options.hpp>
 
 #include <boost/asio/detail/service_registry.hpp>

Modified: branches/release/boost/asio/impl/read.ipp
==============================================================================
--- branches/release/boost/asio/impl/read.ipp (original)
+++ branches/release/boost/asio/impl/read.ipp 2010-01-10 21:34:00 EST (Sun, 10 Jan 2010)
@@ -75,6 +75,8 @@
   return bytes_transferred;
 }
 
+#if !defined(BOOST_NO_IOSTREAM)
+
 template <typename SyncReadStream, typename Allocator,
     typename CompletionCondition>
 std::size_t read(SyncReadStream& s,
@@ -122,6 +124,8 @@
   return bytes_transferred;
 }
 
+#endif // !defined(BOOST_NO_IOSTREAM)
+
 namespace detail
 {
   template <typename AsyncReadStream, typename MutableBufferSequence,
@@ -232,6 +236,8 @@
   async_read(s, buffers, transfer_all(), handler);
 }
 
+#if !defined(BOOST_NO_IOSTREAM)
+
 namespace detail
 {
   template <typename AsyncReadStream, typename Allocator,
@@ -341,6 +347,8 @@
   async_read(s, b, transfer_all(), handler);
 }
 
+#endif // !defined(BOOST_NO_IOSTREAM)
+
 } // namespace asio
 } // namespace boost
 

Modified: branches/release/boost/asio/impl/read_at.ipp
==============================================================================
--- branches/release/boost/asio/impl/read_at.ipp (original)
+++ branches/release/boost/asio/impl/read_at.ipp 2010-01-10 21:34:00 EST (Sun, 10 Jan 2010)
@@ -81,6 +81,8 @@
   return bytes_transferred;
 }
 
+#if !defined(BOOST_NO_IOSTREAM)
+
 template <typename SyncRandomAccessReadDevice, typename Allocator,
     typename CompletionCondition>
 std::size_t read_at(SyncRandomAccessReadDevice& d,
@@ -126,6 +128,8 @@
   return bytes_transferred;
 }
 
+#endif // !defined(BOOST_NO_IOSTREAM)
+
 namespace detail
 {
   template <typename AsyncRandomAccessReadDevice,
@@ -245,6 +249,8 @@
   async_read_at(d, offset, buffers, transfer_all(), handler);
 }
 
+#if !defined(BOOST_NO_IOSTREAM)
+
 namespace detail
 {
   template <typename AsyncRandomAccessReadDevice, typename Allocator,
@@ -359,6 +365,8 @@
   async_read_at(d, offset, b, transfer_all(), handler);
 }
 
+#endif // !defined(BOOST_NO_IOSTREAM)
+
 } // namespace asio
 } // namespace boost
 

Modified: branches/release/boost/asio/impl/read_until.ipp
==============================================================================
--- branches/release/boost/asio/impl/read_until.ipp (original)
+++ branches/release/boost/asio/impl/read_until.ipp 2010-01-10 21:34:00 EST (Sun, 10 Jan 2010)
@@ -19,9 +19,9 @@
 
 #include <boost/asio/detail/push_options.hpp>
 #include <algorithm>
-#include <limits>
 #include <string>
 #include <utility>
+#include <boost/limits.hpp>
 #include <boost/asio/detail/pop_options.hpp>
 
 #include <boost/asio/buffer.hpp>

Modified: branches/release/boost/asio/impl/write.ipp
==============================================================================
--- branches/release/boost/asio/impl/write.ipp (original)
+++ branches/release/boost/asio/impl/write.ipp 2010-01-10 21:34:00 EST (Sun, 10 Jan 2010)
@@ -70,6 +70,8 @@
   return bytes_transferred;
 }
 
+#if !defined(BOOST_NO_IOSTREAM)
+
 template <typename SyncWriteStream, typename Allocator,
     typename CompletionCondition>
 std::size_t write(SyncWriteStream& s,
@@ -103,6 +105,8 @@
   return bytes_transferred;
 }
 
+#endif // !defined(BOOST_NO_IOSTREAM)
+
 namespace detail
 {
   template <typename AsyncWriteStream, typename ConstBufferSequence,
@@ -213,6 +217,8 @@
   async_write(s, buffers, transfer_all(), handler);
 }
 
+#if !defined(BOOST_NO_IOSTREAM)
+
 namespace detail
 {
   template <typename AsyncWriteStream, typename Allocator,
@@ -288,6 +294,8 @@
   async_write(s, b, transfer_all(), handler);
 }
 
+#endif // !defined(BOOST_NO_IOSTREAM)
+
 } // namespace asio
 } // namespace boost
 

Modified: branches/release/boost/asio/impl/write_at.ipp
==============================================================================
--- branches/release/boost/asio/impl/write_at.ipp (original)
+++ branches/release/boost/asio/impl/write_at.ipp 2010-01-10 21:34:00 EST (Sun, 10 Jan 2010)
@@ -76,6 +76,8 @@
   return bytes_transferred;
 }
 
+#if !defined(BOOST_NO_IOSTREAM)
+
 template <typename SyncRandomAccessWriteDevice, typename Allocator,
     typename CompletionCondition>
 std::size_t write_at(SyncRandomAccessWriteDevice& d,
@@ -111,6 +113,8 @@
   return bytes_transferred;
 }
 
+#endif // !defined(BOOST_NO_IOSTREAM)
+
 namespace detail
 {
   template <typename AsyncRandomAccessWriteDevice, typename ConstBufferSequence,
@@ -227,6 +231,8 @@
   async_write_at(d, offset, buffers, transfer_all(), handler);
 }
 
+#if !defined(BOOST_NO_IOSTREAM)
+
 namespace detail
 {
   template <typename AsyncRandomAccessWriteDevice, typename Allocator,
@@ -305,6 +311,8 @@
   async_write_at(d, offset, b, transfer_all(), handler);
 }
 
+#endif // !defined(BOOST_NO_IOSTREAM)
+
 } // namespace asio
 } // namespace boost
 

Modified: branches/release/boost/asio/ip/address.hpp
==============================================================================
--- branches/release/boost/asio/ip/address.hpp (original)
+++ branches/release/boost/asio/ip/address.hpp 2010-01-10 21:34:00 EST (Sun, 10 Jan 2010)
@@ -18,7 +18,10 @@
 #include <boost/asio/detail/push_options.hpp>
 
 #include <boost/asio/detail/push_options.hpp>
-#include <iosfwd>
+#include <boost/config.hpp>
+#if !defined(BOOST_NO_IOSTREAM)
+# include <iosfwd>
+#endif // !defined(BOOST_NO_IOSTREAM)
 #include <string>
 #include <boost/throw_exception.hpp>
 #include <boost/asio/detail/pop_options.hpp>
@@ -250,6 +253,8 @@
   boost::asio::ip::address_v6 ipv6_address_;
 };
 
+#if !defined(BOOST_NO_IOSTREAM)
+
 /// Output an address as a string.
 /**
  * Used to output a human-readable string for a specified address.
@@ -270,6 +275,8 @@
   return os;
 }
 
+#endif // !defined(BOOST_NO_IOSTREAM)
+
 } // namespace ip
 } // namespace asio
 } // namespace boost

Modified: branches/release/boost/asio/ip/address_v4.hpp
==============================================================================
--- branches/release/boost/asio/ip/address_v4.hpp (original)
+++ branches/release/boost/asio/ip/address_v4.hpp 2010-01-10 21:34:00 EST (Sun, 10 Jan 2010)
@@ -18,6 +18,10 @@
 #include <boost/asio/detail/push_options.hpp>
 
 #include <boost/asio/detail/push_options.hpp>
+#include <boost/config.hpp>
+#if !defined(BOOST_NO_IOSTREAM)
+# include <iosfwd>
+#endif // !defined(BOOST_NO_IOSTREAM)
 #include <climits>
 #include <string>
 #include <stdexcept>
@@ -269,6 +273,8 @@
   boost::asio::detail::in4_addr_type addr_;
 };
 
+#if !defined(BOOST_NO_IOSTREAM)
+
 /// Output an address as a string.
 /**
  * Used to output a human-readable string for a specified address.
@@ -300,6 +306,8 @@
   return os;
 }
 
+#endif // !defined(BOOST_NO_IOSTREAM)
+
 } // namespace ip
 } // namespace asio
 } // namespace boost

Modified: branches/release/boost/asio/ip/address_v6.hpp
==============================================================================
--- branches/release/boost/asio/ip/address_v6.hpp (original)
+++ branches/release/boost/asio/ip/address_v6.hpp 2010-01-10 21:34:00 EST (Sun, 10 Jan 2010)
@@ -18,6 +18,10 @@
 #include <boost/asio/detail/push_options.hpp>
 
 #include <boost/asio/detail/push_options.hpp>
+#include <boost/config.hpp>
+#if !defined(BOOST_NO_IOSTREAM)
+# include <iosfwd>
+#endif // !defined(BOOST_NO_IOSTREAM)
 #include <cstring>
 #include <string>
 #include <stdexcept>
@@ -383,6 +387,8 @@
   unsigned long scope_id_;
 };
 
+#if !defined(BOOST_NO_IOSTREAM)
+
 /// Output an address as a string.
 /**
  * Used to output a human-readable string for a specified address.
@@ -414,6 +420,8 @@
   return os;
 }
 
+#endif // !defined(BOOST_NO_IOSTREAM)
+
 } // namespace ip
 } // namespace asio
 } // namespace boost

Modified: branches/release/boost/asio/ip/basic_endpoint.hpp
==============================================================================
--- branches/release/boost/asio/ip/basic_endpoint.hpp (original)
+++ branches/release/boost/asio/ip/basic_endpoint.hpp 2010-01-10 21:34:00 EST (Sun, 10 Jan 2010)
@@ -18,13 +18,16 @@
 #include <boost/asio/detail/push_options.hpp>
 
 #include <boost/asio/detail/push_options.hpp>
+#include <boost/config.hpp>
 #include <boost/throw_exception.hpp>
 #include <boost/detail/workaround.hpp>
 #include <cstring>
-#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
-# include <ostream>
-#endif // BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
-#include <sstream>
+#if !defined(BOOST_NO_IOSTREAM)
+# if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+# include <ostream>
+# endif // BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+# include <sstream>
+#endif // !defined(BOOST_NO_IOSTREAM)
 #include <boost/asio/detail/pop_options.hpp>
 
 #include <boost/asio/error.hpp>
@@ -297,6 +300,8 @@
   } data_;
 };
 
+#if !defined(BOOST_NO_IOSTREAM)
+
 /// Output an endpoint as a string.
 /**
  * Used to output a human-readable string for a specified endpoint.
@@ -368,6 +373,8 @@
 }
 #endif // BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
 
+#endif // !defined(BOOST_NO_IOSTREAM)
+
 } // namespace ip
 } // namespace asio
 } // namespace boost

Modified: branches/release/boost/asio/ip/tcp.hpp
==============================================================================
--- branches/release/boost/asio/ip/tcp.hpp (original)
+++ branches/release/boost/asio/ip/tcp.hpp 2010-01-10 21:34:00 EST (Sun, 10 Jan 2010)
@@ -93,8 +93,10 @@
   /// The TCP resolver type.
   typedef basic_resolver<tcp> resolver;
 
+#if !defined(BOOST_NO_IOSTREAM)
   /// The TCP iostream type.
   typedef basic_socket_iostream<tcp> iostream;
+#endif // !defined(BOOST_NO_IOSTREAM)
 
   /// Socket option for disabling the Nagle algorithm.
   /**

Modified: branches/release/boost/asio/local/stream_protocol.hpp
==============================================================================
--- branches/release/boost/asio/local/stream_protocol.hpp (original)
+++ branches/release/boost/asio/local/stream_protocol.hpp 2010-01-10 21:34:00 EST (Sun, 10 Jan 2010)
@@ -72,8 +72,10 @@
   /// The UNIX domain acceptor type.
   typedef basic_socket_acceptor<stream_protocol> acceptor;
 
+#if !defined(BOOST_NO_IOSTREAM)
   /// The UNIX domain iostream type.
   typedef basic_socket_iostream<stream_protocol> iostream;
+#endif // !defined(BOOST_NO_IOSTREAM)
 };
 
 } // namespace local

Modified: branches/release/boost/asio/read.hpp
==============================================================================
--- branches/release/boost/asio/read.hpp (original)
+++ branches/release/boost/asio/read.hpp 2010-01-10 21:34:00 EST (Sun, 10 Jan 2010)
@@ -170,6 +170,8 @@
 std::size_t read(SyncReadStream& s, const MutableBufferSequence& buffers,
     CompletionCondition completion_condition, boost::system::error_code& ec);
 
+#if !defined(BOOST_NO_IOSTREAM)
+
 /// Attempt to read a certain amount of data from a stream before returning.
 /**
  * This function is used to read a certain number of bytes of data from a
@@ -274,6 +276,8 @@
 std::size_t read(SyncReadStream& s, basic_streambuf<Allocator>& b,
     CompletionCondition completion_condition, boost::system::error_code& ec);
 
+#endif // !defined(BOOST_NO_IOSTREAM)
+
 /*@}*/
 /**
  * @defgroup async_read boost::asio::async_read
@@ -413,6 +417,8 @@
 void async_read(AsyncReadStream& s, const MutableBufferSequence& buffers,
     CompletionCondition completion_condition, ReadHandler handler);
 
+#if !defined(BOOST_NO_IOSTREAM)
+
 /// Start an asynchronous operation to read a certain amount of data from a
 /// stream.
 /**
@@ -516,6 +522,8 @@
 void async_read(AsyncReadStream& s, basic_streambuf<Allocator>& b,
     CompletionCondition completion_condition, ReadHandler handler);
 
+#endif // !defined(BOOST_NO_IOSTREAM)
+
 /*@}*/
 
 } // namespace asio

Modified: branches/release/boost/asio/read_at.hpp
==============================================================================
--- branches/release/boost/asio/read_at.hpp (original)
+++ branches/release/boost/asio/read_at.hpp 2010-01-10 21:34:00 EST (Sun, 10 Jan 2010)
@@ -186,6 +186,8 @@
     boost::uint64_t offset, const MutableBufferSequence& buffers,
     CompletionCondition completion_condition, boost::system::error_code& ec);
 
+#if !defined(BOOST_NO_IOSTREAM)
+
 /// Attempt to read a certain amount of data at the specified offset before
 /// returning.
 /**
@@ -305,6 +307,8 @@
     boost::uint64_t offset, basic_streambuf<Allocator>& b,
     CompletionCondition completion_condition, boost::system::error_code& ec);
 
+#endif // !defined(BOOST_NO_IOSTREAM)
+
 /*@}*/
 /**
  * @defgroup async_read_at boost::asio::async_read_at
@@ -449,6 +453,8 @@
     boost::uint64_t offset, const MutableBufferSequence& buffers,
     CompletionCondition completion_condition, ReadHandler handler);
 
+#if !defined(BOOST_NO_IOSTREAM)
+
 /// Start an asynchronous operation to read a certain amount of data at the
 /// specified offset.
 /**
@@ -558,6 +564,8 @@
     boost::uint64_t offset, basic_streambuf<Allocator>& b,
     CompletionCondition completion_condition, ReadHandler handler);
 
+#endif // !defined(BOOST_NO_IOSTREAM)
+
 /*@}*/
 
 } // namespace asio

Modified: branches/release/boost/asio/read_until.hpp
==============================================================================
--- branches/release/boost/asio/read_until.hpp (original)
+++ branches/release/boost/asio/read_until.hpp 2010-01-10 21:34:00 EST (Sun, 10 Jan 2010)
@@ -18,8 +18,13 @@
 #include <boost/asio/detail/push_options.hpp>
 
 #include <boost/asio/detail/push_options.hpp>
-#include <cstddef>
 #include <boost/config.hpp>
+#include <boost/asio/detail/pop_options.hpp>
+
+#if !defined(BOOST_NO_IOSTREAM)
+
+#include <boost/asio/detail/push_options.hpp>
+#include <cstddef>
 #include <boost/regex.hpp>
 #include <boost/type_traits/is_function.hpp>
 #include <boost/type_traits/remove_pointer.hpp>
@@ -836,6 +841,8 @@
 
 #include <boost/asio/impl/read_until.ipp>
 
+#endif // !defined(BOOST_NO_IOSTREAM)
+
 #include <boost/asio/detail/pop_options.hpp>
 
 #endif // BOOST_ASIO_READ_UNTIL_HPP

Modified: branches/release/boost/asio/streambuf.hpp
==============================================================================
--- branches/release/boost/asio/streambuf.hpp (original)
+++ branches/release/boost/asio/streambuf.hpp 2010-01-10 21:34:00 EST (Sun, 10 Jan 2010)
@@ -19,6 +19,8 @@
 
 #include <boost/asio/basic_streambuf.hpp>
 
+#if !defined(BOOST_NO_IOSTREAM)
+
 namespace boost {
 namespace asio {
 
@@ -28,6 +30,8 @@
 } // namespace asio
 } // namespace boost
 
+#endif // !defined(BOOST_NO_IOSTREAM)
+
 #include <boost/asio/detail/pop_options.hpp>
 
 #endif // BOOST_ASIO_STREAMBUF_HPP

Modified: branches/release/boost/asio/time_traits.hpp
==============================================================================
--- branches/release/boost/asio/time_traits.hpp (original)
+++ branches/release/boost/asio/time_traits.hpp 2010-01-10 21:34:00 EST (Sun, 10 Jan 2010)
@@ -43,7 +43,11 @@
   /// Get the current time.
   static time_type now()
   {
+#if defined(BOOST_DATE_TIME_HAS_HIGH_PRECISION_CLOCK)
     return boost::posix_time::microsec_clock::universal_time();
+#else // defined(BOOST_DATE_TIME_HAS_HIGH_PRECISION_CLOCK)
+ return boost::posix_time::second_clock::universal_time();
+#endif // defined(BOOST_DATE_TIME_HAS_HIGH_PRECISION_CLOCK)
   }
 
   /// Add a duration to a time.

Modified: branches/release/boost/asio/write.hpp
==============================================================================
--- branches/release/boost/asio/write.hpp (original)
+++ branches/release/boost/asio/write.hpp 2010-01-10 21:34:00 EST (Sun, 10 Jan 2010)
@@ -169,6 +169,8 @@
 std::size_t write(SyncWriteStream& s, const ConstBufferSequence& buffers,
     CompletionCondition completion_condition, boost::system::error_code& ec);
 
+#if !defined(BOOST_NO_IOSTREAM)
+
 /// Write all of the supplied data to a stream before returning.
 /**
  * This function is used to write a certain number of bytes of data to a stream.
@@ -279,6 +281,8 @@
 std::size_t write(SyncWriteStream& s, basic_streambuf<Allocator>& b,
     CompletionCondition completion_condition, boost::system::error_code& ec);
 
+#endif // !defined(BOOST_NO_IOSTREAM)
+
 /*@}*/
 /**
  * @defgroup async_write boost::asio::async_write
@@ -411,6 +415,8 @@
 void async_write(AsyncWriteStream& s, const ConstBufferSequence& buffers,
     CompletionCondition completion_condition, WriteHandler handler);
 
+#if !defined(BOOST_NO_IOSTREAM)
+
 /// Start an asynchronous operation to write all of the supplied data to a
 /// stream.
 /**
@@ -510,6 +516,8 @@
 void async_write(AsyncWriteStream& s, basic_streambuf<Allocator>& b,
     CompletionCondition completion_condition, WriteHandler handler);
 
+#endif // !defined(BOOST_NO_IOSTREAM)
+
 /*@}*/
 
 } // namespace asio

Modified: branches/release/boost/asio/write_at.hpp
==============================================================================
--- branches/release/boost/asio/write_at.hpp (original)
+++ branches/release/boost/asio/write_at.hpp 2010-01-10 21:34:00 EST (Sun, 10 Jan 2010)
@@ -182,6 +182,8 @@
     boost::uint64_t offset, const ConstBufferSequence& buffers,
     CompletionCondition completion_condition, boost::system::error_code& ec);
 
+#if !defined(BOOST_NO_IOSTREAM)
+
 /// Write all of the supplied data at the specified offset before returning.
 /**
  * This function is used to write a certain number of bytes of data to a random
@@ -303,6 +305,8 @@
     basic_streambuf<Allocator>& b, CompletionCondition completion_condition,
     boost::system::error_code& ec);
 
+#endif // !defined(BOOST_NO_IOSTREAM)
+
 /*@}*/
 /**
  * @defgroup async_write_at boost::asio::async_write_at
@@ -440,6 +444,8 @@
     boost::uint64_t offset, const ConstBufferSequence& buffers,
     CompletionCondition completion_condition, WriteHandler handler);
 
+#if !defined(BOOST_NO_IOSTREAM)
+
 /// Start an asynchronous operation to write all of the supplied data at the
 /// specified offset.
 /**
@@ -545,6 +551,8 @@
     basic_streambuf<Allocator>& b, CompletionCondition completion_condition,
     WriteHandler handler);
 
+#endif // !defined(BOOST_NO_IOSTREAM)
+
 /*@}*/
 
 } // namespace asio

Modified: branches/release/libs/asio/example/porthopper/client.cpp
==============================================================================
--- branches/release/libs/asio/example/porthopper/client.cpp (original)
+++ branches/release/libs/asio/example/porthopper/client.cpp 2010-01-10 21:34:00 EST (Sun, 10 Jan 2010)
@@ -49,7 +49,7 @@
     control_socket.connect(remote_endpoint);
 
     // Create a datagram socket to receive data from the server.
- shared_ptr<udp::socket> data_socket(
+ boost::shared_ptr<udp::socket> data_socket(
         new udp::socket(io_service, udp::endpoint(udp::v4(), 0)));
 
     // Determine what port we will receive data on.
@@ -81,7 +81,7 @@
       std::cout << " Starting renegotiation";
 
       // Create the new data socket.
- shared_ptr<udp::socket> new_data_socket(
+ boost::shared_ptr<udp::socket> new_data_socket(
           new udp::socket(io_service, udp::endpoint(udp::v4(), 0)));
 
       // Determine the new port we will use to receive data.
@@ -113,7 +113,7 @@
               // We have successfully received a frame on the new data socket,
               // so we can close the old data socket. This will cancel any
               // outstanding receive operation on the old data socket.
- lambda::var(data_socket) = shared_ptr<udp::socket>()
+ lambda::var(data_socket) = boost::shared_ptr<udp::socket>()
             ]
           ));
 

Modified: branches/release/libs/asio/test/deadline_timer.cpp
==============================================================================
--- branches/release/libs/asio/test/deadline_timer.cpp (original)
+++ branches/release/libs/asio/test/deadline_timer.cpp 2010-01-10 21:34:00 EST (Sun, 10 Jan 2010)
@@ -59,7 +59,11 @@
 
 ptime now()
 {
+#if defined(BOOST_DATE_TIME_HAS_HIGH_PRECISION_CLOCK)
   return microsec_clock::universal_time();
+#else // defined(BOOST_DATE_TIME_HAS_HIGH_PRECISION_CLOCK)
+ return second_clock::universal_time();
+#endif // defined(BOOST_DATE_TIME_HAS_HIGH_PRECISION_CLOCK)
 }
 
 void deadline_timer_test()


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk