diff --git a/test/scenario/network/fake_network_socket.cc b/test/scenario/network/fake_network_socket.cc
index 5d4ad3f..59699f5 100644
--- a/test/scenario/network/fake_network_socket.cc
+++ b/test/scenario/network/fake_network_socket.cc
@@ -56,6 +56,11 @@
     pending_read_events_count_--;
     RTC_DCHECK_GE(pending_read_events_count_, 0);
   }
+  if (!endpoint_->Enabled()) {
+    // If endpoint disabled then just pop and discard packet.
+    PopFrontPacket();
+    return true;
+  }
   SignalReadEvent(this);
   return true;
 }
@@ -111,6 +116,10 @@
                               const rtc::SocketAddress& addr) {
   RTC_CHECK(!local_addr_.IsNil())
       << "Socket have to be bind to some local address";
+  if (!endpoint_->Enabled()) {
+    error_ = ENETDOWN;
+    return -1;
+  }
   rtc::CopyOnWriteBuffer packet(static_cast<const uint8_t*>(pv), cb);
   endpoint_->SendPacket(local_addr_, addr, packet);
   return cb;
@@ -176,7 +185,6 @@
 }
 
 int FakeNetworkSocket::GetError() const {
-  RTC_CHECK(error_ == 0);
   return error_;
 }
 
diff --git a/test/scenario/network/network_emulation_unittest.cc b/test/scenario/network/network_emulation_unittest.cc
index 87b2b22..e965dbc 100644
--- a/test/scenario/network/network_emulation_unittest.cc
+++ b/test/scenario/network/network_emulation_unittest.cc
@@ -33,7 +33,8 @@
 
 class SocketReader : public sigslot::has_slots<> {
  public:
-  explicit SocketReader(rtc::AsyncSocket* socket) : socket_(socket) {
+  explicit SocketReader(rtc::AsyncSocket* socket, rtc::Thread* network_thread)
+      : socket_(socket), network_thread_(network_thread) {
     socket_->SignalReadEvent.connect(this, &SocketReader::OnReadEvent);
     size_ = 128 * 1024;
     buf_ = new char[size_];
@@ -42,12 +43,13 @@
 
   void OnReadEvent(rtc::AsyncSocket* socket) {
     RTC_DCHECK(socket_ == socket);
-    int64_t timestamp;
-    len_ = socket_->Recv(buf_, size_, &timestamp);
-    {
+    network_thread_->PostTask(RTC_FROM_HERE, [this]() {
+      int64_t timestamp;
+      len_ = socket_->Recv(buf_, size_, &timestamp);
+
       rtc::CritScope crit(&lock_);
       received_count_++;
-    }
+    });
   }
 
   int ReceivedCount() {
@@ -56,7 +58,8 @@
   }
 
  private:
-  rtc::AsyncSocket* socket_;
+  rtc::AsyncSocket* const socket_;
+  rtc::Thread* const network_thread_;
   char* buf_;
   size_t size_;
   int len_;
@@ -204,8 +207,8 @@
     auto* s2 = nt2->network_thread()->socketserver()->CreateAsyncSocket(
         AF_INET, SOCK_DGRAM);
 
-    SocketReader r1(s1);
-    SocketReader r2(s2);
+    SocketReader r1(s1, nt1->network_thread());
+    SocketReader r2(s2, nt2->network_thread());
 
     rtc::SocketAddress a1(alice_endpoint->GetPeerLocalAddress(), 0);
     rtc::SocketAddress a2(bob_endpoint->GetPeerLocalAddress(), 0);
@@ -217,8 +220,10 @@
     s2->Connect(s1->GetLocalAddress());
 
     for (uint64_t i = 0; i < 1000; i++) {
-      s1->Send(data.data(), data.size());
-      s2->Send(data.data(), data.size());
+      nt1->network_thread()->PostTask(
+          RTC_FROM_HERE, [&]() { s1->Send(data.data(), data.size()); });
+      nt2->network_thread()->PostTask(
+          RTC_FROM_HERE, [&]() { s2->Send(data.data(), data.size()); });
     }
 
     rtc::Event wait;
@@ -279,8 +284,8 @@
   auto* s2 = nt2->network_thread()->socketserver()->CreateAsyncSocket(
       AF_INET, SOCK_DGRAM);
 
-  SocketReader r1(s1);
-  SocketReader r2(s2);
+  SocketReader r1(s1, nt1->network_thread());
+  SocketReader r2(s2, nt2->network_thread());
 
   rtc::SocketAddress a1(alice_endpoint->GetPeerLocalAddress(), 0);
   rtc::SocketAddress a2(bob_endpoint->GetPeerLocalAddress(), 0);
@@ -294,14 +299,13 @@
   // Send 10 packets for 1
   rtc::Event wait;
   for (uint64_t i = 0; i < 11; i++) {
-    s1->Send(data.data(), data.size());
-    s2->Send(data.data(), data.size());
+    nt1->network_thread()->PostTask(
+        RTC_FROM_HERE, [&]() { s1->Send(data.data(), data.size()); });
+    nt2->network_thread()->PostTask(
+        RTC_FROM_HERE, [&]() { s2->Send(data.data(), data.size()); });
     wait.Wait(100);
   }
 
-  delete s1;
-  delete s2;
-
   std::atomic<int> received_stats_count{0};
   nt1->GetStats([&](EmulatedNetworkStats st) {
     EXPECT_EQ(st.packets_sent, 11l);
@@ -314,6 +318,9 @@
   ASSERT_EQ_WAIT(received_stats_count.load(), 1, kStatsWaitTimeoutMs);
   EXPECT_EQ(r1.ReceivedCount(), 11);
   EXPECT_EQ(r2.ReceivedCount(), 11);
+
+  delete s1;
+  delete s2;
 }
 
 // Testing that packets are delivered via all routes using a routing scheme as
