Chromium Code Reviews| Index: net/socket/ssl_client_socket_nss.cc |
| diff --git a/net/socket/ssl_client_socket_nss.cc b/net/socket/ssl_client_socket_nss.cc |
| index 83e866c4a00900a9ccbef9b0c99fd0d0c901ce2b..3a9601bccc03384647fb38d962e8b95e252bc991 100644 |
| --- a/net/socket/ssl_client_socket_nss.cc |
| +++ b/net/socket/ssl_client_socket_nss.cc |
| @@ -1749,15 +1749,23 @@ void SSLClientSocketNSS::UncorkAfterTimeout() { |
| } while (nsent > 0); |
| } |
| -// Do network I/O between the given buffer and the given socket. |
| -// Return true if some I/O performed, false otherwise (error or ERR_IO_PENDING) |
| +// Do as much network I/O as possible between the buffer and the |
| +// transport socket. Return true if some I/O performed, false |
| +// otherwise (error or ERR_IO_PENDING). |
| bool SSLClientSocketNSS::DoTransportIO() { |
| EnterFunction(""); |
| bool network_moved = false; |
| if (nss_bufs_ != NULL) { |
| - int nsent = BufferSend(); |
| - int nreceived = BufferRecv(); |
| - network_moved = (nsent > 0 || nreceived >= 0); |
| + int rv; |
| + // Read and write as much data as we can. Loops are neccessary |
| + // because Read() and Write() may return synchronously. |
|
wtc
2011/07/21 01:06:07
This comment should be updated to only describe th
Sergey Ulanov
2011/07/21 01:11:08
Done.
|
| + do { |
| + rv = BufferSend(); |
| + if (rv > 0) |
| + network_moved = true; |
| + } while (rv > 0); |
| + if (BufferRecv() >= 0) |
| + network_moved = true; |
| } |
| LeaveFunction(network_moved); |
| return network_moved; |