| Index: mojo/services/network/tcp_connected_socket_impl.cc
|
| diff --git a/mojo/services/network/tcp_connected_socket_impl.cc b/mojo/services/network/tcp_connected_socket_impl.cc
|
| index ecd174c6e5bdbe2d71686549e96859f97d5ebfdd..9e8a9a9703e406881f185bb2e5725b86e15d7f40 100644
|
| --- a/mojo/services/network/tcp_connected_socket_impl.cc
|
| +++ b/mojo/services/network/tcp_connected_socket_impl.cc
|
| @@ -40,10 +40,18 @@ void TCPConnectedSocketImpl::ReceiveMore() {
|
| base::Bind(&TCPConnectedSocketImpl::OnReceiveStreamReady,
|
| weak_ptr_factory_.GetWeakPtr()));
|
| return;
|
| - } else if (result != MOJO_RESULT_OK) {
|
| + }
|
| +
|
| + if (result == MOJO_RESULT_FAILED_PRECONDITION) {
|
| + // It's valid that the user of this class consumed the data they care about
|
| + // and closed their data pipe handles after writing data. This class should
|
| + // still write out all the data.
|
| + return;
|
| + }
|
| +
|
| + if (result != MOJO_RESULT_OK) {
|
| // The receive stream is in a bad state.
|
| // TODO(darin): How should this be communicated to our client?
|
| - socket_->Close();
|
| return;
|
| }
|
|
|
| @@ -63,7 +71,6 @@ void TCPConnectedSocketImpl::ReceiveMore() {
|
| } else {
|
| // Some kind of error.
|
| // TODO(brettw) notify caller of error.
|
| - socket_->Close();
|
| }
|
| }
|
|
|
| @@ -78,7 +85,6 @@ void TCPConnectedSocketImpl::DidReceive(bool completed_synchronously,
|
| // Error.
|
| pending_receive_ = NULL; // Closes the pipe (owned by the pending write).
|
| // TODO(brettw) notify the caller of an error?
|
| - socket_->Close();
|
| return;
|
| }
|
|
|
| @@ -111,7 +117,6 @@ void TCPConnectedSocketImpl::SendMore() {
|
| return;
|
| } else if (result != MOJO_RESULT_OK) {
|
| // TODO(brettw) notify caller of error.
|
| - socket_->Close();
|
| return;
|
| }
|
|
|
| @@ -140,7 +145,6 @@ void TCPConnectedSocketImpl::DidSend(bool completed_synchronously,
|
| if (result < 0) {
|
| // TODO(brettw) report error.
|
| pending_send_ = NULL;
|
| - socket_->Close();
|
| return;
|
| }
|
|
|
|
|