| Index: webrtc/base/virtualsocketserver.cc
 | 
| diff --git a/webrtc/base/virtualsocketserver.cc b/webrtc/base/virtualsocketserver.cc
 | 
| index 9ba6a2f7fa655a4042f865f1296351a829fdc7db..cfb4eb294b673dc97b041a8e3a98505855e0d64f 100644
 | 
| --- a/webrtc/base/virtualsocketserver.cc
 | 
| +++ b/webrtc/base/virtualsocketserver.cc
 | 
| @@ -56,6 +56,7 @@ enum {
 | 
|    MSG_ID_ADDRESS_BOUND,
 | 
|    MSG_ID_CONNECT,
 | 
|    MSG_ID_DISCONNECT,
 | 
| +  MSG_ID_SIGNALREADEVENT,
 | 
|  };
 | 
|  
 | 
|  // Packets are passed between sockets as messages.  We copy the data just like
 | 
| @@ -303,6 +304,14 @@ int VirtualSocket::RecvFrom(void* pv,
 | 
|      delete packet;
 | 
|    }
 | 
|  
 | 
| +  // To behave like a real socket, SignalReadEvent should fire in the next
 | 
| +  // message loop pass if there's still data buffered.
 | 
| +  if (!recv_buffer_.empty()) {
 | 
| +    // Clear the message so it doesn't end up posted multiple times.
 | 
| +    server_->msg_queue_->Clear(this, MSG_ID_SIGNALREADEVENT);
 | 
| +    server_->msg_queue_->Post(RTC_FROM_HERE, this, MSG_ID_SIGNALREADEVENT);
 | 
| +  }
 | 
| +
 | 
|    if (SOCK_STREAM == type_) {
 | 
|      bool was_full = (recv_buffer_size_ == server_->recv_buffer_capacity_);
 | 
|      recv_buffer_size_ -= data_read;
 | 
| @@ -421,6 +430,10 @@ void VirtualSocket::OnMessage(Message* pmsg) {
 | 
|      }
 | 
|    } else if (pmsg->message_id == MSG_ID_ADDRESS_BOUND) {
 | 
|      SignalAddressReady(this, GetLocalAddress());
 | 
| +  } else if (pmsg->message_id == MSG_ID_SIGNALREADEVENT) {
 | 
| +    if (!recv_buffer_.empty()) {
 | 
| +      SignalReadEvent(this);
 | 
| +    }
 | 
|    } else {
 | 
|      RTC_NOTREACHED();
 | 
|    }
 | 
| 
 |