diff --git a/experiments/field_trials.py b/experiments/field_trials.py
index 468b94e..eb99b14 100755
--- a/experiments/field_trials.py
+++ b/experiments/field_trials.py
@@ -117,9 +117,6 @@
     FieldTrial('WebRTC-RtcEventLogEncodeNetEqSetMinimumDelayKillSwitch',
                'webrtc:14763',
                date(2024, 4, 1)),
-    FieldTrial('WebRTC-SCM-Timestamp',
-               'webrtc:5773',
-               date(2024, 4, 1)),
     FieldTrial('WebRTC-SetCodecPreferences-ReceiveOnlyFilterInsteadOfThrow',
                'webrtc:15396',
                date(2024, 12, 1)),
diff --git a/rtc_base/async_udp_socket.cc b/rtc_base/async_udp_socket.cc
index 7f1301d..e9c16dc 100644
--- a/rtc_base/async_udp_socket.cc
+++ b/rtc_base/async_udp_socket.cc
@@ -21,12 +21,6 @@
 
 namespace rtc {
 
-// Returns true if the experiement "WebRTC-SCM-Timestamp" is explicitly
-// disabled.
-static bool IsScmTimeStampExperimentDisabled() {
-  return webrtc::field_trial::IsDisabled("WebRTC-SCM-Timestamp");
-}
-
 AsyncUDPSocket* AsyncUDPSocket::Create(Socket* socket,
                                        const SocketAddress& bind_address) {
   std::unique_ptr<Socket> owned_socket(socket);
@@ -133,15 +127,9 @@
     receive_buffer.arrival_time = webrtc::Timestamp::Micros(rtc::TimeMicros());
   } else {
     if (!socket_time_offset_) {
-      // Estimate timestamp offset from first packet arrival time unless
-      // disabled
-      bool estimate_time_offset = !IsScmTimeStampExperimentDisabled();
-      if (estimate_time_offset) {
-        socket_time_offset_ = webrtc::Timestamp::Micros(rtc::TimeMicros()) -
-                              *receive_buffer.arrival_time;
-      } else {
-        socket_time_offset_ = webrtc::TimeDelta::Micros(0);
-      }
+      // Estimate timestamp offset from first packet arrival time.
+      socket_time_offset_ = webrtc::Timestamp::Micros(rtc::TimeMicros()) -
+                            *receive_buffer.arrival_time;
     }
     *receive_buffer.arrival_time += *socket_time_offset_;
   }
diff --git a/rtc_base/physical_socket_server.cc b/rtc_base/physical_socket_server.cc
index 787e942..71da31e 100644
--- a/rtc_base/physical_socket_server.cc
+++ b/rtc_base/physical_socket_server.cc
@@ -148,12 +148,6 @@
   bool* value_;
 };
 
-// Returns true if the experiement "WebRTC-SCM-Timestamp" is explicitly
-// disabled.
-bool IsScmTimeStampExperimentDisabled() {
-  return webrtc::field_trial::IsDisabled("WebRTC-SCM-Timestamp");
-}
-
 }  // namespace
 
 namespace rtc {
@@ -163,8 +157,7 @@
       s_(s),
       error_(0),
       state_((s == INVALID_SOCKET) ? CS_CLOSED : CS_CONNECTED),
-      resolver_(nullptr),
-      read_scm_timestamp_experiment_(!IsScmTimeStampExperimentDisabled()) {
+      resolver_(nullptr) {
   if (s_ != INVALID_SOCKET) {
     SetEnabledEvents(DE_READ | DE_WRITE);
 
@@ -523,14 +516,13 @@
 
 #if defined(WEBRTC_POSIX)
   int received = 0;
-  if (read_scm_timestamp_experiment_) {
-    iovec iov = {.iov_base = buffer, .iov_len = length};
-    msghdr msg = {.msg_iov = &iov, .msg_iovlen = 1};
-    if (out_addr) {
-      out_addr->Clear();
-      msg.msg_name = addr;
-      msg.msg_namelen = addr_len;
-    }
+  iovec iov = {.iov_base = buffer, .iov_len = length};
+  msghdr msg = {.msg_iov = &iov, .msg_iovlen = 1};
+  if (out_addr) {
+    out_addr->Clear();
+    msg.msg_name = addr;
+    msg.msg_namelen = addr_len;
+  }
     // TODO(bugs.webrtc.org/15368): What size is needed? IPV6_TCLASS is supposed
     // to be an int. Why is a larger size needed?
     char control[CMSG_SPACE(sizeof(struct timeval) + 5 * sizeof(int))] = {};
@@ -567,19 +559,6 @@
     if (out_addr) {
       SocketAddressFromSockAddrStorage(addr_storage, out_addr);
     }
-  } else {  // !read_scm_timestamp_experiment_
-    if (out_addr) {
-      received = ::recvfrom(s_, static_cast<char*>(buffer),
-                            static_cast<int>(length), 0, addr, &addr_len);
-      SocketAddressFromSockAddrStorage(addr_storage, out_addr);
-    } else {
-      received =
-          ::recv(s_, static_cast<char*>(buffer), static_cast<int>(length), 0);
-    }
-    if (timestamp) {
-      *timestamp = GetSocketRecvTimestamp(s_);
-    }
-  }
   return received;
 
 #else
@@ -852,13 +831,10 @@
   ioctlsocket(s_, FIONBIO, &argp);
 #elif defined(WEBRTC_POSIX)
   fcntl(s_, F_SETFL, fcntl(s_, F_GETFL, 0) | O_NONBLOCK);
-  if (!IsScmTimeStampExperimentDisabled()) {
-    int value = 1;
-    // Attempt to get receive packet timestamp from the socket.
-    if (::setsockopt(s_, SOL_SOCKET, SO_TIMESTAMP, &value, sizeof(value)) !=
-        0) {
-      RTC_DLOG(LS_ERROR) << "::setsockopt failed. errno: " << LAST_SYSTEM_ERROR;
-    }
+  int value = 1;
+  // Attempt to get receive packet timestamp from the socket.
+  if (::setsockopt(s_, SOL_SOCKET, SO_TIMESTAMP, &value, sizeof(value)) != 0) {
+    RTC_DLOG(LS_ERROR) << "::setsockopt failed. errno: " << LAST_SYSTEM_ERROR;
   }
 #endif
 
@@ -868,10 +844,11 @@
   // we attempt to write to such a socket, SIGPIPE will be raised, which by
   // default will terminate the process, which we don't want. By specifying
   // this socket option, SIGPIPE will be disabled for the socket.
-  int value = 1;
+  value = 1;
   if (::setsockopt(s_, SOL_SOCKET, SO_NOSIGPIPE, &value, sizeof(value)) != 0) {
     RTC_DLOG(LS_ERROR) << "::setsockopt failed. errno: " << LAST_SYSTEM_ERROR;
   }
+
 #endif
   ss_->Add(this);
   return true;
diff --git a/rtc_base/physical_socket_server.h b/rtc_base/physical_socket_server.h
index b8cf042..3bab75a 100644
--- a/rtc_base/physical_socket_server.h
+++ b/rtc_base/physical_socket_server.h
@@ -252,7 +252,6 @@
 #endif
 
  private:
-  const bool read_scm_timestamp_experiment_;
   uint8_t enabled_events_ = 0;
 };
 
diff --git a/rtc_base/physical_socket_server_unittest.cc b/rtc_base/physical_socket_server_unittest.cc
index ccb548d..c61e9b4 100644
--- a/rtc_base/physical_socket_server_unittest.cc
+++ b/rtc_base/physical_socket_server_unittest.cc
@@ -471,19 +471,6 @@
   SocketTest::TestSocketRecvTimestampIPv6();
 }
 
-#if !defined(WEBRTC_MAC)
-TEST_F(PhysicalSocketTest, TestSocketRecvTimestampIPv4ScmExperimentDisabled) {
-  MAYBE_SKIP_IPV4;
-  webrtc::test::ScopedFieldTrials trial("WebRTC-SCM-Timestamp/Disabled/");
-  SocketTest::TestSocketRecvTimestampIPv4();
-}
-
-TEST_F(PhysicalSocketTest, TestSocketRecvTimestampIPv6ScmExperimentDisabled) {
-  webrtc::test::ScopedFieldTrials trial("WebRTC-SCM-Timestamp/Disabled/");
-  SocketTest::TestSocketRecvTimestampIPv6();
-}
-#endif
-
 #if !defined(WEBRTC_MAC) && !defined(WEBRTC_IOS)
 // TODO(bugs.webrtc.org/15368): IpV4 fails on IOS and MAC. IPV6 works.
 TEST_F(PhysicalSocketTest, TestSocketSendRecvWithEcnIPv4) {
