diff --git a/p2p/base/dtls_transport.cc b/p2p/base/dtls_transport.cc
index ce2793c..172d061 100644
--- a/p2p/base/dtls_transport.cc
+++ b/p2p/base/dtls_transport.cc
@@ -93,17 +93,12 @@
                                                 size_t* written,
                                                 int* error) {
   RTC_DCHECK_RUN_ON(&sequence_checker_);
+  // Always succeeds, since this is an unreliable transport anyway.
+  // TODO(zhihuang): Should this block if ice_transport_'s temporarily
+  // unwritable?
   rtc::PacketOptions packet_options;
-  int sent = ice_transport_->SendPacket(static_cast<const char*>(data),
-                                        data_len, packet_options);
-  if (sent < 0) {
-    if (written) {
-      *written = 0;
-    }
-    return rtc::IsBlockingError(ice_transport_->GetError()) ? rtc::SR_BLOCK
-                                                            : rtc::SR_ERROR;
-  }
-
+  ice_transport_->SendPacket(static_cast<const char*>(data), data_len,
+                             packet_options);
   if (written) {
     *written = data_len;
   }
diff --git a/p2p/base/dtls_transport_unittest.cc b/p2p/base/dtls_transport_unittest.cc
index 4957b46..851c1ea 100644
--- a/p2p/base/dtls_transport_unittest.cc
+++ b/p2p/base/dtls_transport_unittest.cc
@@ -421,16 +421,6 @@
   TestTransfer(1000, 100, /*srtp=*/false);
 }
 
-// Connect with DTLS, and fail to write, to ensure errors are propagated.
-TEST_F(DtlsTransportTest, TestWriteFailsOverDtls) {
-  PrepareDtls(rtc::KT_DEFAULT);
-  ASSERT_TRUE(Connect());
-  client1_.fake_ice_transport()->SetError(EAGAIN);
-  int res = client1_.dtls_transport()->SendPacket("hello", 5,
-                                                  rtc::PacketOptions(), 0);
-  EXPECT_EQ(res, -1);
-}
-
 // Connect with DTLS, combine multiple DTLS records into one packet.
 // Our DTLS implementation doesn't do this, but other implementations may;
 // see https://tools.ietf.org/html/rfc6347#section-4.1.1.
diff --git a/p2p/base/fake_ice_transport.h b/p2p/base/fake_ice_transport.h
index 7f93444..8b52fe9 100644
--- a/p2p/base/fake_ice_transport.h
+++ b/p2p/base/fake_ice_transport.h
@@ -302,10 +302,6 @@
       return -1;
     }
 
-    if (error_ != 0) {
-      return -1;
-    }
-
     send_packet_.AppendData(data, len);
     if (!combine_outgoing_packets_ || send_packet_.size() > len) {
       rtc::CopyOnWriteBuffer packet(std::move(send_packet_));
@@ -342,17 +338,7 @@
     }
   }
 
-  // Sets the error that is returned by `GetError`. If an error is set (i.e.
-  // non-zero), `SendPacket` will return -1.
-  void SetError(int error) {
-    RTC_DCHECK_RUN_ON(network_thread_);
-    error_ = error;
-  }
-
-  int GetError() override {
-    RTC_DCHECK_RUN_ON(network_thread_);
-    return error_;
-  }
+  int GetError() override { return 0; }
 
   rtc::CopyOnWriteBuffer last_sent_packet() {
     RTC_DCHECK_RUN_ON(network_thread_);
@@ -435,7 +421,6 @@
   rtc::CopyOnWriteBuffer last_sent_packet_ RTC_GUARDED_BY(network_thread_);
   rtc::Thread* const network_thread_;
   webrtc::ScopedTaskSafetyDetached task_safety_;
-  int error_ RTC_GUARDED_BY(network_thread_) = 0;
 };
 
 class FakeIceTransportWrapper : public webrtc::IceTransportInterface {
