dcsctp: Refactor socket test to allow recreation of the sockets.

This will be useful in future socket handover tests.

Bug: webrtc:13154
Change-Id: Ia789ae971edd9d2832be088f2f8f7dd50c9ce52d
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/231222
Reviewed-by: Victor Boivie <boivie@webrtc.org>
Commit-Queue: Sergey Sukhanov <sergeysu@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#34931}
diff --git a/net/dcsctp/common/internal_types.h b/net/dcsctp/common/internal_types.h
index 3bbc05e..e7dabf3 100644
--- a/net/dcsctp/common/internal_types.h
+++ b/net/dcsctp/common/internal_types.h
@@ -10,6 +10,7 @@
 #ifndef NET_DCSCTP_COMMON_INTERNAL_TYPES_H_
 #define NET_DCSCTP_COMMON_INTERNAL_TYPES_H_
 
+#include <functional>
 #include <utility>
 
 #include "net/dcsctp/public/strong_alias.h"
diff --git a/net/dcsctp/socket/dcsctp_socket_test.cc b/net/dcsctp/socket/dcsctp_socket_test.cc
index c0d7725..5f99cc9 100644
--- a/net/dcsctp/socket/dcsctp_socket_test.cc
+++ b/net/dcsctp/socket/dcsctp_socket_test.cc
@@ -254,8 +254,10 @@
       : options_(MakeOptionsForTest(enable_message_interleaving)),
         cb_a_("A"),
         cb_z_("Z"),
-        sock_a_("A", cb_a_, GetPacketObserver("A"), options_),
-        sock_z_("Z", cb_z_, GetPacketObserver("Z"), options_) {}
+        sock_a_(std::make_unique<DcSctpSocket>(
+            "A", cb_a_, GetPacketObserver("A"), options_)),
+        sock_z_(std::make_unique<DcSctpSocket>(
+            "Z", cb_z_, GetPacketObserver("Z"), options_)) {}
 
   void AdvanceTime(DurationMs duration) {
     cb_a_.AdvanceTime(duration);
@@ -293,8 +295,8 @@
   }
 
   void RunTimers() {
-    RunTimers(cb_a_, sock_a_);
-    RunTimers(cb_z_, sock_z_);
+    RunTimers(cb_a_, *sock_a_);
+    RunTimers(cb_z_, *sock_z_);
   }
 
   // Calls Connect() on `sock_a_` and make the connection established.
@@ -302,22 +304,22 @@
     EXPECT_CALL(cb_a_, OnConnected).Times(1);
     EXPECT_CALL(cb_z_, OnConnected).Times(1);
 
-    sock_a_.Connect();
+    sock_a_->Connect();
     // Z reads INIT, INIT_ACK, COOKIE_ECHO, COOKIE_ACK
-    sock_z_.ReceivePacket(cb_a_.ConsumeSentPacket());
-    sock_a_.ReceivePacket(cb_z_.ConsumeSentPacket());
-    sock_z_.ReceivePacket(cb_a_.ConsumeSentPacket());
-    sock_a_.ReceivePacket(cb_z_.ConsumeSentPacket());
+    sock_z_->ReceivePacket(cb_a_.ConsumeSentPacket());
+    sock_a_->ReceivePacket(cb_z_.ConsumeSentPacket());
+    sock_z_->ReceivePacket(cb_a_.ConsumeSentPacket());
+    sock_a_->ReceivePacket(cb_z_.ConsumeSentPacket());
 
-    EXPECT_EQ(sock_a_.state(), SocketState::kConnected);
-    EXPECT_EQ(sock_z_.state(), SocketState::kConnected);
+    EXPECT_EQ(sock_a_->state(), SocketState::kConnected);
+    EXPECT_EQ(sock_z_->state(), SocketState::kConnected);
   }
 
   const DcSctpOptions options_;
   testing::NiceMock<MockDcSctpSocketCallbacks> cb_a_;
   testing::NiceMock<MockDcSctpSocketCallbacks> cb_z_;
-  DcSctpSocket sock_a_;
-  DcSctpSocket sock_z_;
+  std::unique_ptr<DcSctpSocket> sock_a_;
+  std::unique_ptr<DcSctpSocket> sock_z_;
 };
 
 TEST_F(DcSctpSocketTest, EstablishConnection) {
@@ -326,18 +328,18 @@
   EXPECT_CALL(cb_a_, OnConnectionRestarted).Times(0);
   EXPECT_CALL(cb_z_, OnConnectionRestarted).Times(0);
 
-  sock_a_.Connect();
+  sock_a_->Connect();
   // Z reads INIT, produces INIT_ACK
-  sock_z_.ReceivePacket(cb_a_.ConsumeSentPacket());
+  sock_z_->ReceivePacket(cb_a_.ConsumeSentPacket());
   // A reads INIT_ACK, produces COOKIE_ECHO
-  sock_a_.ReceivePacket(cb_z_.ConsumeSentPacket());
+  sock_a_->ReceivePacket(cb_z_.ConsumeSentPacket());
   // Z reads COOKIE_ECHO, produces COOKIE_ACK
-  sock_z_.ReceivePacket(cb_a_.ConsumeSentPacket());
+  sock_z_->ReceivePacket(cb_a_.ConsumeSentPacket());
   // A reads COOKIE_ACK.
-  sock_a_.ReceivePacket(cb_z_.ConsumeSentPacket());
+  sock_a_->ReceivePacket(cb_z_.ConsumeSentPacket());
 
-  EXPECT_EQ(sock_a_.state(), SocketState::kConnected);
-  EXPECT_EQ(sock_z_.state(), SocketState::kConnected);
+  EXPECT_EQ(sock_a_->state(), SocketState::kConnected);
+  EXPECT_EQ(sock_z_->state(), SocketState::kConnected);
 }
 
 TEST_F(DcSctpSocketTest, EstablishConnectionWithSetupCollision) {
@@ -345,53 +347,53 @@
   EXPECT_CALL(cb_z_, OnConnected).Times(1);
   EXPECT_CALL(cb_a_, OnConnectionRestarted).Times(0);
   EXPECT_CALL(cb_z_, OnConnectionRestarted).Times(0);
-  sock_a_.Connect();
-  sock_z_.Connect();
+  sock_a_->Connect();
+  sock_z_->Connect();
 
-  ExchangeMessages(sock_a_, cb_a_, sock_z_, cb_z_);
+  ExchangeMessages(*sock_a_, cb_a_, *sock_z_, cb_z_);
 
-  EXPECT_EQ(sock_a_.state(), SocketState::kConnected);
-  EXPECT_EQ(sock_z_.state(), SocketState::kConnected);
+  EXPECT_EQ(sock_a_->state(), SocketState::kConnected);
+  EXPECT_EQ(sock_z_->state(), SocketState::kConnected);
 }
 
 TEST_F(DcSctpSocketTest, ShuttingDownWhileEstablishingConnection) {
   EXPECT_CALL(cb_a_, OnConnected).Times(0);
   EXPECT_CALL(cb_z_, OnConnected).Times(1);
-  sock_a_.Connect();
+  sock_a_->Connect();
 
   // Z reads INIT, produces INIT_ACK
-  sock_z_.ReceivePacket(cb_a_.ConsumeSentPacket());
+  sock_z_->ReceivePacket(cb_a_.ConsumeSentPacket());
   // A reads INIT_ACK, produces COOKIE_ECHO
-  sock_a_.ReceivePacket(cb_z_.ConsumeSentPacket());
+  sock_a_->ReceivePacket(cb_z_.ConsumeSentPacket());
   // Z reads COOKIE_ECHO, produces COOKIE_ACK
-  sock_z_.ReceivePacket(cb_a_.ConsumeSentPacket());
+  sock_z_->ReceivePacket(cb_a_.ConsumeSentPacket());
   // Drop COOKIE_ACK, just to more easily verify shutdown protocol.
   cb_z_.ConsumeSentPacket();
 
   // As Socket A has received INIT_ACK, it has a TCB and is connected, while
   // Socket Z needs to receive COOKIE_ECHO to get there. Socket A still has
   // timers running at this point.
-  EXPECT_EQ(sock_a_.state(), SocketState::kConnecting);
-  EXPECT_EQ(sock_z_.state(), SocketState::kConnected);
+  EXPECT_EQ(sock_a_->state(), SocketState::kConnecting);
+  EXPECT_EQ(sock_z_->state(), SocketState::kConnected);
 
   // Socket A is now shut down, which should make it stop those timers.
-  sock_a_.Shutdown();
+  sock_a_->Shutdown();
 
   EXPECT_CALL(cb_a_, OnClosed).Times(1);
   EXPECT_CALL(cb_z_, OnClosed).Times(1);
 
   // Z reads SHUTDOWN, produces SHUTDOWN_ACK
-  sock_z_.ReceivePacket(cb_a_.ConsumeSentPacket());
+  sock_z_->ReceivePacket(cb_a_.ConsumeSentPacket());
   // A reads SHUTDOWN_ACK, produces SHUTDOWN_COMPLETE
-  sock_a_.ReceivePacket(cb_z_.ConsumeSentPacket());
+  sock_a_->ReceivePacket(cb_z_.ConsumeSentPacket());
   // Z reads SHUTDOWN_COMPLETE.
-  sock_z_.ReceivePacket(cb_a_.ConsumeSentPacket());
+  sock_z_->ReceivePacket(cb_a_.ConsumeSentPacket());
 
   EXPECT_TRUE(cb_a_.ConsumeSentPacket().empty());
   EXPECT_TRUE(cb_z_.ConsumeSentPacket().empty());
 
-  EXPECT_EQ(sock_a_.state(), SocketState::kClosed);
-  EXPECT_EQ(sock_z_.state(), SocketState::kClosed);
+  EXPECT_EQ(sock_a_->state(), SocketState::kClosed);
+  EXPECT_EQ(sock_z_->state(), SocketState::kClosed);
 }
 
 TEST_F(DcSctpSocketTest, EstablishSimultaneousConnection) {
@@ -399,29 +401,29 @@
   EXPECT_CALL(cb_z_, OnConnected).Times(1);
   EXPECT_CALL(cb_a_, OnConnectionRestarted).Times(0);
   EXPECT_CALL(cb_z_, OnConnectionRestarted).Times(0);
-  sock_a_.Connect();
+  sock_a_->Connect();
 
   // INIT isn't received by Z, as it wasn't ready yet.
   cb_a_.ConsumeSentPacket();
 
-  sock_z_.Connect();
+  sock_z_->Connect();
 
   // A reads INIT, produces INIT_ACK
-  sock_a_.ReceivePacket(cb_z_.ConsumeSentPacket());
+  sock_a_->ReceivePacket(cb_z_.ConsumeSentPacket());
 
   // Z reads INIT_ACK, sends COOKIE_ECHO
-  sock_z_.ReceivePacket(cb_a_.ConsumeSentPacket());
+  sock_z_->ReceivePacket(cb_a_.ConsumeSentPacket());
 
   // A reads COOKIE_ECHO - establishes connection.
-  sock_a_.ReceivePacket(cb_z_.ConsumeSentPacket());
+  sock_a_->ReceivePacket(cb_z_.ConsumeSentPacket());
 
-  EXPECT_EQ(sock_a_.state(), SocketState::kConnected);
+  EXPECT_EQ(sock_a_->state(), SocketState::kConnected);
 
   // Proceed with the remaining packets.
-  ExchangeMessages(sock_a_, cb_a_, sock_z_, cb_z_);
+  ExchangeMessages(*sock_a_, cb_a_, *sock_z_, cb_z_);
 
-  EXPECT_EQ(sock_a_.state(), SocketState::kConnected);
-  EXPECT_EQ(sock_z_.state(), SocketState::kConnected);
+  EXPECT_EQ(sock_a_->state(), SocketState::kConnected);
+  EXPECT_EQ(sock_z_->state(), SocketState::kConnected);
 }
 
 TEST_F(DcSctpSocketTest, EstablishConnectionLostCookieAck) {
@@ -430,34 +432,34 @@
   EXPECT_CALL(cb_a_, OnConnectionRestarted).Times(0);
   EXPECT_CALL(cb_z_, OnConnectionRestarted).Times(0);
 
-  sock_a_.Connect();
+  sock_a_->Connect();
   // Z reads INIT, produces INIT_ACK
-  sock_z_.ReceivePacket(cb_a_.ConsumeSentPacket());
+  sock_z_->ReceivePacket(cb_a_.ConsumeSentPacket());
   // A reads INIT_ACK, produces COOKIE_ECHO
-  sock_a_.ReceivePacket(cb_z_.ConsumeSentPacket());
+  sock_a_->ReceivePacket(cb_z_.ConsumeSentPacket());
   // Z reads COOKIE_ECHO, produces COOKIE_ACK
-  sock_z_.ReceivePacket(cb_a_.ConsumeSentPacket());
+  sock_z_->ReceivePacket(cb_a_.ConsumeSentPacket());
   // COOKIE_ACK is lost.
   cb_z_.ConsumeSentPacket();
 
-  EXPECT_EQ(sock_a_.state(), SocketState::kConnecting);
-  EXPECT_EQ(sock_z_.state(), SocketState::kConnected);
+  EXPECT_EQ(sock_a_->state(), SocketState::kConnecting);
+  EXPECT_EQ(sock_z_->state(), SocketState::kConnected);
 
   // This will make A re-send the COOKIE_ECHO
   AdvanceTime(DurationMs(options_.t1_cookie_timeout));
   RunTimers();
 
   // Z reads COOKIE_ECHO, produces COOKIE_ACK
-  sock_z_.ReceivePacket(cb_a_.ConsumeSentPacket());
+  sock_z_->ReceivePacket(cb_a_.ConsumeSentPacket());
   // A reads COOKIE_ACK.
-  sock_a_.ReceivePacket(cb_z_.ConsumeSentPacket());
+  sock_a_->ReceivePacket(cb_z_.ConsumeSentPacket());
 
-  EXPECT_EQ(sock_a_.state(), SocketState::kConnected);
-  EXPECT_EQ(sock_z_.state(), SocketState::kConnected);
+  EXPECT_EQ(sock_a_->state(), SocketState::kConnected);
+  EXPECT_EQ(sock_z_->state(), SocketState::kConnected);
 }
 
 TEST_F(DcSctpSocketTest, ResendInitAndEstablishConnection) {
-  sock_a_.Connect();
+  sock_a_->Connect();
   // INIT is never received by Z.
   ASSERT_HAS_VALUE_AND_ASSIGN(SctpPacket init_packet,
                               SctpPacket::Parse(cb_a_.ConsumeSentPacket()));
@@ -467,20 +469,20 @@
   RunTimers();
 
   // Z reads INIT, produces INIT_ACK
-  sock_z_.ReceivePacket(cb_a_.ConsumeSentPacket());
+  sock_z_->ReceivePacket(cb_a_.ConsumeSentPacket());
   // A reads INIT_ACK, produces COOKIE_ECHO
-  sock_a_.ReceivePacket(cb_z_.ConsumeSentPacket());
+  sock_a_->ReceivePacket(cb_z_.ConsumeSentPacket());
   // Z reads COOKIE_ECHO, produces COOKIE_ACK
-  sock_z_.ReceivePacket(cb_a_.ConsumeSentPacket());
+  sock_z_->ReceivePacket(cb_a_.ConsumeSentPacket());
   // A reads COOKIE_ACK.
-  sock_a_.ReceivePacket(cb_z_.ConsumeSentPacket());
+  sock_a_->ReceivePacket(cb_z_.ConsumeSentPacket());
 
-  EXPECT_EQ(sock_a_.state(), SocketState::kConnected);
-  EXPECT_EQ(sock_z_.state(), SocketState::kConnected);
+  EXPECT_EQ(sock_a_->state(), SocketState::kConnected);
+  EXPECT_EQ(sock_z_->state(), SocketState::kConnected);
 }
 
 TEST_F(DcSctpSocketTest, ResendingInitTooManyTimesAborts) {
-  sock_a_.Connect();
+  sock_a_->Connect();
 
   // INIT is never received by Z.
   ASSERT_HAS_VALUE_AND_ASSIGN(SctpPacket init_packet,
@@ -502,16 +504,16 @@
   EXPECT_CALL(cb_a_, OnAborted).Times(1);
   RunTimers();
 
-  EXPECT_EQ(sock_a_.state(), SocketState::kClosed);
+  EXPECT_EQ(sock_a_->state(), SocketState::kClosed);
 }
 
 TEST_F(DcSctpSocketTest, ResendCookieEchoAndEstablishConnection) {
-  sock_a_.Connect();
+  sock_a_->Connect();
 
   // Z reads INIT, produces INIT_ACK
-  sock_z_.ReceivePacket(cb_a_.ConsumeSentPacket());
+  sock_z_->ReceivePacket(cb_a_.ConsumeSentPacket());
   // A reads INIT_ACK, produces COOKIE_ECHO
-  sock_a_.ReceivePacket(cb_z_.ConsumeSentPacket());
+  sock_a_->ReceivePacket(cb_z_.ConsumeSentPacket());
 
   // COOKIE_ECHO is never received by Z.
   ASSERT_HAS_VALUE_AND_ASSIGN(SctpPacket init_packet,
@@ -522,21 +524,21 @@
   RunTimers();
 
   // Z reads COOKIE_ECHO, produces COOKIE_ACK
-  sock_z_.ReceivePacket(cb_a_.ConsumeSentPacket());
+  sock_z_->ReceivePacket(cb_a_.ConsumeSentPacket());
   // A reads COOKIE_ACK.
-  sock_a_.ReceivePacket(cb_z_.ConsumeSentPacket());
+  sock_a_->ReceivePacket(cb_z_.ConsumeSentPacket());
 
-  EXPECT_EQ(sock_a_.state(), SocketState::kConnected);
-  EXPECT_EQ(sock_z_.state(), SocketState::kConnected);
+  EXPECT_EQ(sock_a_->state(), SocketState::kConnected);
+  EXPECT_EQ(sock_z_->state(), SocketState::kConnected);
 }
 
 TEST_F(DcSctpSocketTest, ResendingCookieEchoTooManyTimesAborts) {
-  sock_a_.Connect();
+  sock_a_->Connect();
 
   // Z reads INIT, produces INIT_ACK
-  sock_z_.ReceivePacket(cb_a_.ConsumeSentPacket());
+  sock_z_->ReceivePacket(cb_a_.ConsumeSentPacket());
   // A reads INIT_ACK, produces COOKIE_ECHO
-  sock_a_.ReceivePacket(cb_z_.ConsumeSentPacket());
+  sock_a_->ReceivePacket(cb_z_.ConsumeSentPacket());
 
   // COOKIE_ECHO is never received by Z.
   ASSERT_HAS_VALUE_AND_ASSIGN(SctpPacket init_packet,
@@ -559,19 +561,19 @@
   EXPECT_CALL(cb_a_, OnAborted).Times(1);
   RunTimers();
 
-  EXPECT_EQ(sock_a_.state(), SocketState::kClosed);
+  EXPECT_EQ(sock_a_->state(), SocketState::kClosed);
 }
 
 TEST_F(DcSctpSocketTest, DoesntSendMorePacketsUntilCookieAckHasBeenReceived) {
-  sock_a_.Send(DcSctpMessage(StreamID(1), PPID(53),
+  sock_a_->Send(DcSctpMessage(StreamID(1), PPID(53),
                              std::vector<uint8_t>(kLargeMessageSize)),
                kSendOptions);
-  sock_a_.Connect();
+  sock_a_->Connect();
 
   // Z reads INIT, produces INIT_ACK
-  sock_z_.ReceivePacket(cb_a_.ConsumeSentPacket());
+  sock_z_->ReceivePacket(cb_a_.ConsumeSentPacket());
   // A reads INIT_ACK, produces COOKIE_ECHO
-  sock_a_.ReceivePacket(cb_z_.ConsumeSentPacket());
+  sock_a_->ReceivePacket(cb_z_.ConsumeSentPacket());
 
   // COOKIE_ECHO is never received by Z.
   ASSERT_HAS_VALUE_AND_ASSIGN(SctpPacket cookie_echo_packet1,
@@ -609,14 +611,14 @@
   RunTimers();
 
   // Z reads COOKIE_ECHO, produces COOKIE_ACK
-  sock_z_.ReceivePacket(cb_a_.ConsumeSentPacket());
+  sock_z_->ReceivePacket(cb_a_.ConsumeSentPacket());
   // A reads COOKIE_ACK.
-  sock_a_.ReceivePacket(cb_z_.ConsumeSentPacket());
+  sock_a_->ReceivePacket(cb_z_.ConsumeSentPacket());
 
-  EXPECT_EQ(sock_a_.state(), SocketState::kConnected);
-  EXPECT_EQ(sock_z_.state(), SocketState::kConnected);
+  EXPECT_EQ(sock_a_->state(), SocketState::kConnected);
+  EXPECT_EQ(sock_z_->state(), SocketState::kConnected);
 
-  ExchangeMessages(sock_a_, cb_a_, sock_z_, cb_z_);
+  ExchangeMessages(*sock_a_, cb_a_, *sock_z_, cb_z_);
   EXPECT_THAT(cb_z_.ConsumeReceivedMessage()->payload(),
               SizeIs(kLargeMessageSize));
 }
@@ -626,26 +628,26 @@
 
   RTC_LOG(LS_INFO) << "Shutting down";
 
-  sock_a_.Shutdown();
+  sock_a_->Shutdown();
   // Z reads SHUTDOWN, produces SHUTDOWN_ACK
-  sock_z_.ReceivePacket(cb_a_.ConsumeSentPacket());
+  sock_z_->ReceivePacket(cb_a_.ConsumeSentPacket());
   // A reads SHUTDOWN_ACK, produces SHUTDOWN_COMPLETE
-  sock_a_.ReceivePacket(cb_z_.ConsumeSentPacket());
+  sock_a_->ReceivePacket(cb_z_.ConsumeSentPacket());
   // Z reads SHUTDOWN_COMPLETE.
-  sock_z_.ReceivePacket(cb_a_.ConsumeSentPacket());
+  sock_z_->ReceivePacket(cb_a_.ConsumeSentPacket());
 
-  EXPECT_EQ(sock_a_.state(), SocketState::kClosed);
-  EXPECT_EQ(sock_z_.state(), SocketState::kClosed);
+  EXPECT_EQ(sock_a_->state(), SocketState::kClosed);
+  EXPECT_EQ(sock_z_->state(), SocketState::kClosed);
 }
 
 TEST_F(DcSctpSocketTest, ShutdownTimerExpiresTooManyTimeClosesConnection) {
   ConnectSockets();
 
-  sock_a_.Shutdown();
+  sock_a_->Shutdown();
   // Drop first SHUTDOWN packet.
   cb_a_.ConsumeSentPacket();
 
-  EXPECT_EQ(sock_a_.state(), SocketState::kShuttingDown);
+  EXPECT_EQ(sock_a_->state(), SocketState::kShuttingDown);
 
   for (int i = 0; i < *options_.max_retransmissions; ++i) {
     AdvanceTime(DurationMs(options_.rto_initial * (1 << i)));
@@ -662,7 +664,7 @@
   EXPECT_CALL(cb_a_, OnAborted).Times(1);
   RunTimers();
 
-  EXPECT_EQ(sock_a_.state(), SocketState::kClosed);
+  EXPECT_EQ(sock_a_->state(), SocketState::kClosed);
   ASSERT_HAS_VALUE_AND_ASSIGN(SctpPacket packet,
                               SctpPacket::Parse(cb_a_.ConsumeSentPacket()));
   EXPECT_EQ(packet.descriptors()[0].type, AbortChunk::kType);
@@ -670,21 +672,21 @@
 }
 
 TEST_F(DcSctpSocketTest, EstablishConnectionWhileSendingData) {
-  sock_a_.Connect();
+  sock_a_->Connect();
 
-  sock_a_.Send(DcSctpMessage(StreamID(1), PPID(53), {1, 2}), kSendOptions);
+  sock_a_->Send(DcSctpMessage(StreamID(1), PPID(53), {1, 2}), kSendOptions);
 
   // Z reads INIT, produces INIT_ACK
-  sock_z_.ReceivePacket(cb_a_.ConsumeSentPacket());
+  sock_z_->ReceivePacket(cb_a_.ConsumeSentPacket());
   // // A reads INIT_ACK, produces COOKIE_ECHO
-  sock_a_.ReceivePacket(cb_z_.ConsumeSentPacket());
+  sock_a_->ReceivePacket(cb_z_.ConsumeSentPacket());
   // // Z reads COOKIE_ECHO, produces COOKIE_ACK
-  sock_z_.ReceivePacket(cb_a_.ConsumeSentPacket());
+  sock_z_->ReceivePacket(cb_a_.ConsumeSentPacket());
   // // A reads COOKIE_ACK.
-  sock_a_.ReceivePacket(cb_z_.ConsumeSentPacket());
+  sock_a_->ReceivePacket(cb_z_.ConsumeSentPacket());
 
-  EXPECT_EQ(sock_a_.state(), SocketState::kConnected);
-  EXPECT_EQ(sock_z_.state(), SocketState::kConnected);
+  EXPECT_EQ(sock_a_->state(), SocketState::kConnected);
+  EXPECT_EQ(sock_z_->state(), SocketState::kConnected);
 
   absl::optional<DcSctpMessage> msg = cb_z_.ConsumeReceivedMessage();
   ASSERT_TRUE(msg.has_value());
@@ -694,8 +696,8 @@
 TEST_F(DcSctpSocketTest, SendMessageAfterEstablished) {
   ConnectSockets();
 
-  sock_a_.Send(DcSctpMessage(StreamID(1), PPID(53), {1, 2}), kSendOptions);
-  sock_z_.ReceivePacket(cb_a_.ConsumeSentPacket());
+  sock_a_->Send(DcSctpMessage(StreamID(1), PPID(53), {1, 2}), kSendOptions);
+  sock_z_->ReceivePacket(cb_a_.ConsumeSentPacket());
 
   absl::optional<DcSctpMessage> msg = cb_z_.ConsumeReceivedMessage();
   ASSERT_TRUE(msg.has_value());
@@ -705,14 +707,14 @@
 TEST_F(DcSctpSocketTest, TimeoutResendsPacket) {
   ConnectSockets();
 
-  sock_a_.Send(DcSctpMessage(StreamID(1), PPID(53), {1, 2}), kSendOptions);
+  sock_a_->Send(DcSctpMessage(StreamID(1), PPID(53), {1, 2}), kSendOptions);
   cb_a_.ConsumeSentPacket();
 
   RTC_LOG(LS_INFO) << "Advancing time";
   AdvanceTime(options_.rto_initial);
   RunTimers();
 
-  sock_z_.ReceivePacket(cb_a_.ConsumeSentPacket());
+  sock_z_->ReceivePacket(cb_a_.ConsumeSentPacket());
 
   absl::optional<DcSctpMessage> msg = cb_z_.ConsumeReceivedMessage();
   ASSERT_TRUE(msg.has_value());
@@ -723,15 +725,15 @@
   ConnectSockets();
 
   std::vector<uint8_t> payload(kLargeMessageSize);
-  sock_a_.Send(DcSctpMessage(StreamID(1), PPID(53), payload), kSendOptions);
+  sock_a_->Send(DcSctpMessage(StreamID(1), PPID(53), payload), kSendOptions);
 
   // First DATA
-  sock_z_.ReceivePacket(cb_a_.ConsumeSentPacket());
+  sock_z_->ReceivePacket(cb_a_.ConsumeSentPacket());
   // Second DATA (lost)
   cb_a_.ConsumeSentPacket();
 
   // Retransmit and handle the rest
-  ExchangeMessages(sock_a_, cb_a_, sock_z_, cb_z_);
+  ExchangeMessages(*sock_a_, cb_a_, *sock_z_, cb_z_);
 
   absl::optional<DcSctpMessage> msg = cb_z_.ConsumeReceivedMessage();
   ASSERT_TRUE(msg.has_value());
@@ -743,12 +745,12 @@
   ConnectSockets();
 
   // Inject a HEARTBEAT chunk
-  SctpPacket::Builder b(sock_a_.verification_tag(), DcSctpOptions());
+  SctpPacket::Builder b(sock_a_->verification_tag(), DcSctpOptions());
   uint8_t info[] = {1, 2, 3, 4};
   Parameters::Builder params_builder;
   params_builder.Add(HeartbeatInfoParameter(info));
   b.Add(HeartbeatRequestChunk(params_builder.Build()));
-  sock_a_.ReceivePacket(b.Build());
+  sock_a_->ReceivePacket(b.Build());
 
   // HEARTBEAT_ACK is sent as a reply. Capture it.
   ASSERT_HAS_VALUE_AND_ASSIGN(SctpPacket ack_packet,
@@ -782,8 +784,8 @@
   EXPECT_THAT(hb.info()->info(), SizeIs(8));
 
   // Feed it to Sock-z and expect a HEARTBEAT_ACK that will be propagated back.
-  sock_z_.ReceivePacket(hb_packet_raw);
-  sock_a_.ReceivePacket(cb_z_.ConsumeSentPacket());
+  sock_z_->ReceivePacket(hb_packet_raw);
+  sock_a_->ReceivePacket(cb_z_.ConsumeSentPacket());
 }
 
 TEST_F(DcSctpSocketTest, CloseConnectionAfterTooManyLostHeartbeats) {
@@ -791,7 +793,7 @@
 
   EXPECT_THAT(cb_a_.ConsumeSentPacket(), testing::IsEmpty());
   // Force-close socket Z so that it doesn't interfere from now on.
-  sock_z_.Close();
+  sock_z_->Close();
 
   DurationMs time_to_next_hearbeat = options_.heartbeat_interval;
 
@@ -830,7 +832,7 @@
 
   EXPECT_THAT(cb_a_.ConsumeSentPacket(), testing::IsEmpty());
   // Force-close socket Z so that it doesn't interfere from now on.
-  sock_z_.Close();
+  sock_z_->Close();
 
   DurationMs time_to_next_hearbeat = options_.heartbeat_interval;
 
@@ -860,9 +862,9 @@
       HeartbeatRequestChunk hb,
       HeartbeatRequestChunk::Parse(hb_packet.descriptors()[0].data));
 
-  SctpPacket::Builder b(sock_a_.verification_tag(), options_);
+  SctpPacket::Builder b(sock_a_->verification_tag(), options_);
   b.Add(HeartbeatAckChunk(std::move(hb).extract_parameters()));
-  sock_a_.ReceivePacket(b.Build());
+  sock_a_->ReceivePacket(b.Build());
 
   // Should suffice as exceeding RTO - which will not fire.
   EXPECT_CALL(cb_a_, OnAborted).Times(0);
@@ -883,27 +885,27 @@
 TEST_F(DcSctpSocketTest, ResetStream) {
   ConnectSockets();
 
-  sock_a_.Send(DcSctpMessage(StreamID(1), PPID(53), {1, 2}), {});
-  sock_z_.ReceivePacket(cb_a_.ConsumeSentPacket());
+  sock_a_->Send(DcSctpMessage(StreamID(1), PPID(53), {1, 2}), {});
+  sock_z_->ReceivePacket(cb_a_.ConsumeSentPacket());
 
   absl::optional<DcSctpMessage> msg = cb_z_.ConsumeReceivedMessage();
   ASSERT_TRUE(msg.has_value());
   EXPECT_EQ(msg->stream_id(), StreamID(1));
 
   // Handle SACK
-  sock_a_.ReceivePacket(cb_z_.ConsumeSentPacket());
+  sock_a_->ReceivePacket(cb_z_.ConsumeSentPacket());
 
   // Reset the outgoing stream. This will directly send a RE-CONFIG.
-  sock_a_.ResetStreams(std::vector<StreamID>({StreamID(1)}));
+  sock_a_->ResetStreams(std::vector<StreamID>({StreamID(1)}));
 
   // Receiving the packet will trigger a callback, indicating that A has
   // reset its stream. It will also send a RE-CONFIG with a response.
   EXPECT_CALL(cb_z_, OnIncomingStreamsReset).Times(1);
-  sock_z_.ReceivePacket(cb_a_.ConsumeSentPacket());
+  sock_z_->ReceivePacket(cb_a_.ConsumeSentPacket());
 
   // Receiving a response will trigger a callback. Streams are now reset.
   EXPECT_CALL(cb_a_, OnStreamsResetPerformed).Times(1);
-  sock_a_.ReceivePacket(cb_z_.ConsumeSentPacket());
+  sock_a_->ReceivePacket(cb_z_.ConsumeSentPacket());
 }
 
 TEST_F(DcSctpSocketTest, ResetStreamWillMakeChunksStartAtZeroSsn) {
@@ -911,19 +913,19 @@
 
   std::vector<uint8_t> payload(options_.mtu - 100);
 
-  sock_a_.Send(DcSctpMessage(StreamID(1), PPID(53), payload), {});
-  sock_a_.Send(DcSctpMessage(StreamID(1), PPID(53), payload), {});
+  sock_a_->Send(DcSctpMessage(StreamID(1), PPID(53), payload), {});
+  sock_a_->Send(DcSctpMessage(StreamID(1), PPID(53), payload), {});
 
   auto packet1 = cb_a_.ConsumeSentPacket();
   EXPECT_THAT(packet1, HasDataChunkWithSsn(SSN(0)));
-  sock_z_.ReceivePacket(packet1);
+  sock_z_->ReceivePacket(packet1);
 
   auto packet2 = cb_a_.ConsumeSentPacket();
   EXPECT_THAT(packet2, HasDataChunkWithSsn(SSN(1)));
-  sock_z_.ReceivePacket(packet2);
+  sock_z_->ReceivePacket(packet2);
 
   // Handle SACK
-  sock_a_.ReceivePacket(cb_z_.ConsumeSentPacket());
+  sock_a_->ReceivePacket(cb_z_.ConsumeSentPacket());
 
   absl::optional<DcSctpMessage> msg1 = cb_z_.ConsumeReceivedMessage();
   ASSERT_TRUE(msg1.has_value());
@@ -934,26 +936,26 @@
   EXPECT_EQ(msg2->stream_id(), StreamID(1));
 
   // Reset the outgoing stream. This will directly send a RE-CONFIG.
-  sock_a_.ResetStreams(std::vector<StreamID>({StreamID(1)}));
+  sock_a_->ResetStreams(std::vector<StreamID>({StreamID(1)}));
   // RE-CONFIG, req
-  sock_z_.ReceivePacket(cb_a_.ConsumeSentPacket());
+  sock_z_->ReceivePacket(cb_a_.ConsumeSentPacket());
   // RE-CONFIG, resp
-  sock_a_.ReceivePacket(cb_z_.ConsumeSentPacket());
+  sock_a_->ReceivePacket(cb_z_.ConsumeSentPacket());
 
-  sock_a_.Send(DcSctpMessage(StreamID(1), PPID(53), payload), {});
+  sock_a_->Send(DcSctpMessage(StreamID(1), PPID(53), payload), {});
 
-  sock_a_.Send(DcSctpMessage(StreamID(1), PPID(53), payload), {});
+  sock_a_->Send(DcSctpMessage(StreamID(1), PPID(53), payload), {});
 
   auto packet3 = cb_a_.ConsumeSentPacket();
   EXPECT_THAT(packet3, HasDataChunkWithSsn(SSN(0)));
-  sock_z_.ReceivePacket(packet3);
+  sock_z_->ReceivePacket(packet3);
 
   auto packet4 = cb_a_.ConsumeSentPacket();
   EXPECT_THAT(packet4, HasDataChunkWithSsn(SSN(1)));
-  sock_z_.ReceivePacket(packet4);
+  sock_z_->ReceivePacket(packet4);
 
   // Handle SACK
-  sock_a_.ReceivePacket(cb_z_.ConsumeSentPacket());
+  sock_a_->ReceivePacket(cb_z_.ConsumeSentPacket());
 }
 
 TEST_F(DcSctpSocketTest, ResetStreamWillOnlyResetTheRequestedStreams) {
@@ -962,34 +964,34 @@
   std::vector<uint8_t> payload(options_.mtu - 100);
 
   // Send two ordered messages on SID 1
-  sock_a_.Send(DcSctpMessage(StreamID(1), PPID(53), payload), {});
-  sock_a_.Send(DcSctpMessage(StreamID(1), PPID(53), payload), {});
+  sock_a_->Send(DcSctpMessage(StreamID(1), PPID(53), payload), {});
+  sock_a_->Send(DcSctpMessage(StreamID(1), PPID(53), payload), {});
 
   auto packet1 = cb_a_.ConsumeSentPacket();
   EXPECT_THAT(packet1, HasDataChunkWithStreamId(StreamID(1)));
   EXPECT_THAT(packet1, HasDataChunkWithSsn(SSN(0)));
-  sock_z_.ReceivePacket(packet1);
+  sock_z_->ReceivePacket(packet1);
 
   auto packet2 = cb_a_.ConsumeSentPacket();
   EXPECT_THAT(packet1, HasDataChunkWithStreamId(StreamID(1)));
   EXPECT_THAT(packet2, HasDataChunkWithSsn(SSN(1)));
-  sock_z_.ReceivePacket(packet2);
+  sock_z_->ReceivePacket(packet2);
 
   // Handle SACK
-  sock_a_.ReceivePacket(cb_z_.ConsumeSentPacket());
+  sock_a_->ReceivePacket(cb_z_.ConsumeSentPacket());
 
   // Do the same, for SID 3
-  sock_a_.Send(DcSctpMessage(StreamID(3), PPID(53), payload), {});
-  sock_a_.Send(DcSctpMessage(StreamID(3), PPID(53), payload), {});
+  sock_a_->Send(DcSctpMessage(StreamID(3), PPID(53), payload), {});
+  sock_a_->Send(DcSctpMessage(StreamID(3), PPID(53), payload), {});
   auto packet3 = cb_a_.ConsumeSentPacket();
   EXPECT_THAT(packet3, HasDataChunkWithStreamId(StreamID(3)));
   EXPECT_THAT(packet3, HasDataChunkWithSsn(SSN(0)));
-  sock_z_.ReceivePacket(packet3);
+  sock_z_->ReceivePacket(packet3);
   auto packet4 = cb_a_.ConsumeSentPacket();
   EXPECT_THAT(packet4, HasDataChunkWithStreamId(StreamID(3)));
   EXPECT_THAT(packet4, HasDataChunkWithSsn(SSN(1)));
-  sock_z_.ReceivePacket(packet4);
-  sock_a_.ReceivePacket(cb_z_.ConsumeSentPacket());
+  sock_z_->ReceivePacket(packet4);
+  sock_a_->ReceivePacket(cb_z_.ConsumeSentPacket());
 
   // Receive all messages.
   absl::optional<DcSctpMessage> msg1 = cb_z_.ConsumeReceivedMessage();
@@ -1009,29 +1011,29 @@
   EXPECT_EQ(msg4->stream_id(), StreamID(3));
 
   // Reset SID 1. This will directly send a RE-CONFIG.
-  sock_a_.ResetStreams(std::vector<StreamID>({StreamID(3)}));
+  sock_a_->ResetStreams(std::vector<StreamID>({StreamID(3)}));
   // RE-CONFIG, req
-  sock_z_.ReceivePacket(cb_a_.ConsumeSentPacket());
+  sock_z_->ReceivePacket(cb_a_.ConsumeSentPacket());
   // RE-CONFIG, resp
-  sock_a_.ReceivePacket(cb_z_.ConsumeSentPacket());
+  sock_a_->ReceivePacket(cb_z_.ConsumeSentPacket());
 
   // Send a message on SID 1 and 3 - SID 1 should not be reset, but 3 should.
-  sock_a_.Send(DcSctpMessage(StreamID(1), PPID(53), payload), {});
+  sock_a_->Send(DcSctpMessage(StreamID(1), PPID(53), payload), {});
 
-  sock_a_.Send(DcSctpMessage(StreamID(3), PPID(53), payload), {});
+  sock_a_->Send(DcSctpMessage(StreamID(3), PPID(53), payload), {});
 
   auto packet5 = cb_a_.ConsumeSentPacket();
   EXPECT_THAT(packet5, HasDataChunkWithStreamId(StreamID(1)));
   EXPECT_THAT(packet5, HasDataChunkWithSsn(SSN(2)));  // Unchanged.
-  sock_z_.ReceivePacket(packet5);
+  sock_z_->ReceivePacket(packet5);
 
   auto packet6 = cb_a_.ConsumeSentPacket();
   EXPECT_THAT(packet6, HasDataChunkWithStreamId(StreamID(3)));
   EXPECT_THAT(packet6, HasDataChunkWithSsn(SSN(0)));  // Reset.
-  sock_z_.ReceivePacket(packet6);
+  sock_z_->ReceivePacket(packet6);
 
   // Handle SACK
-  sock_a_.ReceivePacket(cb_z_.ConsumeSentPacket());
+  sock_a_->ReceivePacket(cb_z_.ConsumeSentPacket());
 }
 
 TEST_F(DcSctpSocketTest, OnePeerReconnects) {
@@ -1041,10 +1043,10 @@
   // Let's be evil here - reconnect while a fragmented packet was about to be
   // sent. The receiving side should get it in full.
   std::vector<uint8_t> payload(kLargeMessageSize);
-  sock_a_.Send(DcSctpMessage(StreamID(1), PPID(53), payload), kSendOptions);
+  sock_a_->Send(DcSctpMessage(StreamID(1), PPID(53), payload), kSendOptions);
 
   // First DATA
-  sock_z_.ReceivePacket(cb_a_.ConsumeSentPacket());
+  sock_z_->ReceivePacket(cb_a_.ConsumeSentPacket());
 
   // Create a new association, z2 - and don't use z anymore.
   testing::NiceMock<MockDcSctpSocketCallbacks> cb_z2("Z2");
@@ -1054,7 +1056,7 @@
 
   // Retransmit and handle the rest. As there will be some chunks in-flight that
   // have the wrong verification tag, those will yield errors.
-  ExchangeMessages(sock_a_, cb_a_, sock_z2, cb_z2);
+  ExchangeMessages(*sock_a_, cb_a_, sock_z2, cb_z2);
 
   absl::optional<DcSctpMessage> msg = cb_z2.ConsumeReceivedMessage();
   ASSERT_TRUE(msg.has_value());
@@ -1068,26 +1070,26 @@
   SendOptions send_options;
   send_options.max_retransmissions = 0;
   std::vector<uint8_t> payload(options_.mtu - 100);
-  sock_a_.Send(DcSctpMessage(StreamID(1), PPID(51), payload), send_options);
-  sock_a_.Send(DcSctpMessage(StreamID(1), PPID(52), payload), send_options);
-  sock_a_.Send(DcSctpMessage(StreamID(1), PPID(53), payload), send_options);
+  sock_a_->Send(DcSctpMessage(StreamID(1), PPID(51), payload), send_options);
+  sock_a_->Send(DcSctpMessage(StreamID(1), PPID(52), payload), send_options);
+  sock_a_->Send(DcSctpMessage(StreamID(1), PPID(53), payload), send_options);
 
   // First DATA
-  sock_z_.ReceivePacket(cb_a_.ConsumeSentPacket());
+  sock_z_->ReceivePacket(cb_a_.ConsumeSentPacket());
   // Second DATA (lost)
   cb_a_.ConsumeSentPacket();
   // Third DATA
-  sock_z_.ReceivePacket(cb_a_.ConsumeSentPacket());
+  sock_z_->ReceivePacket(cb_a_.ConsumeSentPacket());
 
   // Handle SACK for first DATA
-  sock_a_.ReceivePacket(cb_z_.ConsumeSentPacket());
+  sock_a_->ReceivePacket(cb_z_.ConsumeSentPacket());
 
   // Handle delayed SACK for third DATA
   AdvanceTime(options_.delayed_ack_max_timeout);
   RunTimers();
 
   // Handle SACK for second DATA
-  sock_a_.ReceivePacket(cb_z_.ConsumeSentPacket());
+  sock_a_->ReceivePacket(cb_z_.ConsumeSentPacket());
 
   // Now the missing data chunk will be marked as nacked, but it might still be
   // in-flight and the reported gap could be due to out-of-order delivery. So
@@ -1100,10 +1102,10 @@
   // will trigger a FORWARD-TSN to be sent.
 
   // FORWARD-TSN (third)
-  sock_z_.ReceivePacket(cb_a_.ConsumeSentPacket());
+  sock_z_->ReceivePacket(cb_a_.ConsumeSentPacket());
 
   // Which will trigger a SACK
-  sock_a_.ReceivePacket(cb_z_.ConsumeSentPacket());
+  sock_a_->ReceivePacket(cb_z_.ConsumeSentPacket());
 
   absl::optional<DcSctpMessage> msg1 = cb_z_.ConsumeReceivedMessage();
   ASSERT_TRUE(msg1.has_value());
@@ -1125,18 +1127,18 @@
   send_options.max_retransmissions = 0;
   std::vector<uint8_t> payload(options_.mtu * 2 - 100 /* margin */);
   // Sending first message
-  sock_a_.Send(DcSctpMessage(StreamID(1), PPID(51), payload), send_options);
+  sock_a_->Send(DcSctpMessage(StreamID(1), PPID(51), payload), send_options);
   // Sending second message
-  sock_a_.Send(DcSctpMessage(StreamID(1), PPID(52), payload), send_options);
+  sock_a_->Send(DcSctpMessage(StreamID(1), PPID(52), payload), send_options);
   // Sending third message
-  sock_a_.Send(DcSctpMessage(StreamID(1), PPID(53), payload), send_options);
+  sock_a_->Send(DcSctpMessage(StreamID(1), PPID(53), payload), send_options);
   // Sending fourth message
-  sock_a_.Send(DcSctpMessage(StreamID(1), PPID(54), payload), send_options);
+  sock_a_->Send(DcSctpMessage(StreamID(1), PPID(54), payload), send_options);
 
   // First DATA, first fragment
   std::vector<uint8_t> packet = cb_a_.ConsumeSentPacket();
   EXPECT_THAT(packet, HasDataChunkWithPPID(PPID(51)));
-  sock_z_.ReceivePacket(std::move(packet));
+  sock_z_->ReceivePacket(std::move(packet));
 
   // First DATA, second fragment (lost)
   packet = cb_a_.ConsumeSentPacket();
@@ -1145,7 +1147,7 @@
   // Second DATA, first fragment
   packet = cb_a_.ConsumeSentPacket();
   EXPECT_THAT(packet, HasDataChunkWithPPID(PPID(52)));
-  sock_z_.ReceivePacket(std::move(packet));
+  sock_z_->ReceivePacket(std::move(packet));
 
   // Second DATA, second fragment (lost)
   packet = cb_a_.ConsumeSentPacket();
@@ -1156,7 +1158,7 @@
   packet = cb_a_.ConsumeSentPacket();
   EXPECT_THAT(packet, HasDataChunkWithPPID(PPID(53)));
   EXPECT_THAT(packet, HasDataChunkWithSsn(SSN(0)));
-  sock_z_.ReceivePacket(std::move(packet));
+  sock_z_->ReceivePacket(std::move(packet));
 
   // Third DATA, second fragment (lost)
   packet = cb_a_.ConsumeSentPacket();
@@ -1167,20 +1169,20 @@
   packet = cb_a_.ConsumeSentPacket();
   EXPECT_THAT(packet, HasDataChunkWithPPID(PPID(54)));
   EXPECT_THAT(packet, HasDataChunkWithSsn(SSN(0)));
-  sock_z_.ReceivePacket(std::move(packet));
+  sock_z_->ReceivePacket(std::move(packet));
 
   // Fourth DATA, second fragment
   packet = cb_a_.ConsumeSentPacket();
   EXPECT_THAT(packet, HasDataChunkWithPPID(PPID(54)));
   EXPECT_THAT(packet, HasDataChunkWithSsn(SSN(0)));
-  sock_z_.ReceivePacket(std::move(packet));
+  sock_z_->ReceivePacket(std::move(packet));
 
-  ExchangeMessages(sock_a_, cb_a_, sock_z_, cb_z_);
+  ExchangeMessages(*sock_a_, cb_a_, *sock_z_, cb_z_);
 
   // Let the RTX timer expire, and exchange FORWARD-TSN/SACKs
   AdvanceTime(options_.rto_initial);
   RunTimers();
-  ExchangeMessages(sock_a_, cb_a_, sock_z_, cb_z_);
+  ExchangeMessages(*sock_a_, cb_a_, *sock_z_, cb_z_);
 
   absl::optional<DcSctpMessage> msg1 = cb_z_.ConsumeReceivedMessage();
   ASSERT_TRUE(msg1.has_value());
@@ -1212,9 +1214,9 @@
   ConnectSockets();
 
   // Inject a FAKE chunk
-  SctpPacket::Builder b(sock_a_.verification_tag(), DcSctpOptions());
+  SctpPacket::Builder b(sock_a_->verification_tag(), DcSctpOptions());
   b.Add(FakeChunk());
-  sock_a_.ReceivePacket(b.Build());
+  sock_a_->ReceivePacket(b.Build());
 
   // ERROR is sent as a reply. Capture it.
   ASSERT_HAS_VALUE_AND_ASSIGN(SctpPacket reply_packet,
@@ -1232,7 +1234,7 @@
   ConnectSockets();
 
   // Inject a ERROR chunk
-  SctpPacket::Builder b(sock_a_.verification_tag(), DcSctpOptions());
+  SctpPacket::Builder b(sock_a_->verification_tag(), DcSctpOptions());
   b.Add(
       ErrorChunk(Parameters::Builder()
                      .Add(UnrecognizedChunkTypeCause({0x49, 0x00, 0x00, 0x04}))
@@ -1240,7 +1242,7 @@
 
   EXPECT_CALL(cb_a_, OnError(ErrorKind::kPeerReported,
                              HasSubstr("Unrecognized Chunk Type")));
-  sock_a_.ReceivePacket(b.Build());
+  sock_a_->ReceivePacket(b.Build());
 }
 
 TEST_F(DcSctpSocketTest, PassingHighWatermarkWillOnlyAcceptCumAckTsn) {
@@ -1255,7 +1257,7 @@
   EXPECT_CALL(cb_z2, OnClosed).Times(0);
   EXPECT_CALL(cb_z2, OnAborted).Times(0);
 
-  sock_a_.Connect();
+  sock_a_->Connect();
   std::vector<uint8_t> init_data = cb_a_.ConsumeSentPacket();
   ASSERT_HAS_VALUE_AND_ASSIGN(SctpPacket init_packet,
                               SctpPacket::Parse(init_data));
@@ -1263,9 +1265,9 @@
       InitChunk init_chunk,
       InitChunk::Parse(init_packet.descriptors()[0].data));
   sock_z2.ReceivePacket(init_data);
-  sock_a_.ReceivePacket(cb_z2.ConsumeSentPacket());
+  sock_a_->ReceivePacket(cb_z2.ConsumeSentPacket());
   sock_z2.ReceivePacket(cb_a_.ConsumeSentPacket());
-  sock_a_.ReceivePacket(cb_z2.ConsumeSentPacket());
+  sock_a_->ReceivePacket(cb_z2.ConsumeSentPacket());
 
   // Fill up Z2 to the high watermark limit.
   constexpr size_t kWatermarkLimit =
@@ -1353,8 +1355,8 @@
 }
 
 TEST_F(DcSctpSocketTest, SetMaxMessageSize) {
-  sock_a_.SetMaxMessageSize(42u);
-  EXPECT_EQ(sock_a_.options().max_message_size, 42u);
+  sock_a_->SetMaxMessageSize(42u);
+  EXPECT_EQ(sock_a_->options().max_message_size, 42u);
 }
 
 TEST_F(DcSctpSocketTest, SendsMessagesWithLowLifetime) {
@@ -1379,10 +1381,10 @@
     send_options.unordered = IsUnordered((i % 2) == 0);
     send_options.lifetime = DurationMs(i % 3);  // 0, 1, 2 ms
 
-    sock_a_.Send(DcSctpMessage(StreamID(1), PPID(53), {1, 2}), send_options);
+    sock_a_->Send(DcSctpMessage(StreamID(1), PPID(53), {1, 2}), send_options);
   }
 
-  ExchangeMessages(sock_a_, cb_a_, sock_z_, cb_z_);
+  ExchangeMessages(*sock_a_, cb_a_, *sock_z_, cb_z_);
 
   for (int i = 0; i < kIterations; ++i) {
     EXPECT_TRUE(cb_z_.ConsumeReceivedMessage().has_value());
@@ -1418,12 +1420,12 @@
 
   // Fill up the send buffer with a large message.
   std::vector<uint8_t> payload(kLargeMessageSize);
-  sock_a_.Send(DcSctpMessage(StreamID(1), PPID(53), payload), kSendOptions);
+  sock_a_->Send(DcSctpMessage(StreamID(1), PPID(53), payload), kSendOptions);
 
   // And queue a few small messages with lifetime=0 or 1 ms - can't be sent.
-  sock_a_.Send(DcSctpMessage(StreamID(1), PPID(53), {1, 2, 3}), lifetime_0);
-  sock_a_.Send(DcSctpMessage(StreamID(1), PPID(53), {4, 5, 6}), lifetime_1);
-  sock_a_.Send(DcSctpMessage(StreamID(1), PPID(53), {7, 8, 9}), lifetime_0);
+  sock_a_->Send(DcSctpMessage(StreamID(1), PPID(53), {1, 2, 3}), lifetime_0);
+  sock_a_->Send(DcSctpMessage(StreamID(1), PPID(53), {4, 5, 6}), lifetime_1);
+  sock_a_->Send(DcSctpMessage(StreamID(1), PPID(53), {7, 8, 9}), lifetime_0);
 
   // Handle all that was sent until congestion window got full.
   for (;;) {
@@ -1431,14 +1433,14 @@
     if (packet_from_a.empty()) {
       break;
     }
-    sock_z_.ReceivePacket(std::move(packet_from_a));
+    sock_z_->ReceivePacket(std::move(packet_from_a));
   }
 
   // Shouldn't be enough to send that large message.
   EXPECT_FALSE(cb_z_.ConsumeReceivedMessage().has_value());
 
   // Exchange the rest of the messages, with the time ever increasing.
-  ExchangeMessages(sock_a_, cb_a_, sock_z_, cb_z_);
+  ExchangeMessages(*sock_a_, cb_a_, *sock_z_, cb_z_);
 
   // The large message should be delivered. It was sent reliably.
   ASSERT_HAS_VALUE_AND_ASSIGN(DcSctpMessage m1, cb_z_.ConsumeReceivedMessage());
@@ -1452,27 +1454,27 @@
 TEST_F(DcSctpSocketTest, HasReasonableBufferedAmountValues) {
   ConnectSockets();
 
-  EXPECT_EQ(sock_a_.buffered_amount(StreamID(1)), 0u);
+  EXPECT_EQ(sock_a_->buffered_amount(StreamID(1)), 0u);
 
-  sock_a_.Send(DcSctpMessage(StreamID(1), PPID(53),
+  sock_a_->Send(DcSctpMessage(StreamID(1), PPID(53),
                              std::vector<uint8_t>(kSmallMessageSize)),
                kSendOptions);
   // Sending a small message will directly send it as a single packet, so
   // nothing is left in the queue.
-  EXPECT_EQ(sock_a_.buffered_amount(StreamID(1)), 0u);
+  EXPECT_EQ(sock_a_->buffered_amount(StreamID(1)), 0u);
 
-  sock_a_.Send(DcSctpMessage(StreamID(1), PPID(53),
+  sock_a_->Send(DcSctpMessage(StreamID(1), PPID(53),
                              std::vector<uint8_t>(kLargeMessageSize)),
                kSendOptions);
 
   // Sending a message will directly start sending a few packets, so the
   // buffered amount is not the full message size.
-  EXPECT_GT(sock_a_.buffered_amount(StreamID(1)), 0u);
-  EXPECT_LT(sock_a_.buffered_amount(StreamID(1)), kLargeMessageSize);
+  EXPECT_GT(sock_a_->buffered_amount(StreamID(1)), 0u);
+  EXPECT_LT(sock_a_->buffered_amount(StreamID(1)), kLargeMessageSize);
 }
 
 TEST_F(DcSctpSocketTest, HasDefaultOnBufferedAmountLowValueZero) {
-  EXPECT_EQ(sock_a_.buffered_amount_low_threshold(StreamID(1)), 0u);
+  EXPECT_EQ(sock_a_->buffered_amount_low_threshold(StreamID(1)), 0u);
 }
 
 TEST_F(DcSctpSocketTest, TriggersOnBufferedAmountLowWithDefaultValueZero) {
@@ -1480,75 +1482,75 @@
   ConnectSockets();
 
   EXPECT_CALL(cb_a_, OnBufferedAmountLow(StreamID(1)));
-  sock_a_.Send(DcSctpMessage(StreamID(1), PPID(53),
+  sock_a_->Send(DcSctpMessage(StreamID(1), PPID(53),
                              std::vector<uint8_t>(kSmallMessageSize)),
                kSendOptions);
-  ExchangeMessages(sock_a_, cb_a_, sock_z_, cb_z_);
+  ExchangeMessages(*sock_a_, cb_a_, *sock_z_, cb_z_);
 }
 
 TEST_F(DcSctpSocketTest, DoesntTriggerOnBufferedAmountLowIfBelowThreshold) {
   static constexpr size_t kMessageSize = 1000;
   static constexpr size_t kBufferedAmountLowThreshold = kMessageSize * 10;
 
-  sock_a_.SetBufferedAmountLowThreshold(StreamID(1),
+  sock_a_->SetBufferedAmountLowThreshold(StreamID(1),
                                         kBufferedAmountLowThreshold);
   EXPECT_CALL(cb_a_, OnBufferedAmountLow).Times(0);
   ConnectSockets();
 
   EXPECT_CALL(cb_a_, OnBufferedAmountLow(StreamID(1))).Times(0);
-  sock_a_.Send(
+  sock_a_->Send(
       DcSctpMessage(StreamID(1), PPID(53), std::vector<uint8_t>(kMessageSize)),
       kSendOptions);
-  ExchangeMessages(sock_a_, cb_a_, sock_z_, cb_z_);
+  ExchangeMessages(*sock_a_, cb_a_, *sock_z_, cb_z_);
 
-  sock_a_.Send(
+  sock_a_->Send(
       DcSctpMessage(StreamID(1), PPID(53), std::vector<uint8_t>(kMessageSize)),
       kSendOptions);
-  ExchangeMessages(sock_a_, cb_a_, sock_z_, cb_z_);
+  ExchangeMessages(*sock_a_, cb_a_, *sock_z_, cb_z_);
 }
 
 TEST_F(DcSctpSocketTest, TriggersOnBufferedAmountMultipleTimes) {
   static constexpr size_t kMessageSize = 1000;
   static constexpr size_t kBufferedAmountLowThreshold = kMessageSize / 2;
 
-  sock_a_.SetBufferedAmountLowThreshold(StreamID(1),
+  sock_a_->SetBufferedAmountLowThreshold(StreamID(1),
                                         kBufferedAmountLowThreshold);
   EXPECT_CALL(cb_a_, OnBufferedAmountLow).Times(0);
   ConnectSockets();
 
   EXPECT_CALL(cb_a_, OnBufferedAmountLow(StreamID(1))).Times(3);
   EXPECT_CALL(cb_a_, OnBufferedAmountLow(StreamID(2))).Times(2);
-  sock_a_.Send(
+  sock_a_->Send(
       DcSctpMessage(StreamID(1), PPID(53), std::vector<uint8_t>(kMessageSize)),
       kSendOptions);
-  ExchangeMessages(sock_a_, cb_a_, sock_z_, cb_z_);
+  ExchangeMessages(*sock_a_, cb_a_, *sock_z_, cb_z_);
 
-  sock_a_.Send(
+  sock_a_->Send(
       DcSctpMessage(StreamID(2), PPID(53), std::vector<uint8_t>(kMessageSize)),
       kSendOptions);
-  ExchangeMessages(sock_a_, cb_a_, sock_z_, cb_z_);
+  ExchangeMessages(*sock_a_, cb_a_, *sock_z_, cb_z_);
 
-  sock_a_.Send(
+  sock_a_->Send(
       DcSctpMessage(StreamID(1), PPID(53), std::vector<uint8_t>(kMessageSize)),
       kSendOptions);
-  ExchangeMessages(sock_a_, cb_a_, sock_z_, cb_z_);
+  ExchangeMessages(*sock_a_, cb_a_, *sock_z_, cb_z_);
 
-  sock_a_.Send(
+  sock_a_->Send(
       DcSctpMessage(StreamID(2), PPID(53), std::vector<uint8_t>(kMessageSize)),
       kSendOptions);
-  ExchangeMessages(sock_a_, cb_a_, sock_z_, cb_z_);
+  ExchangeMessages(*sock_a_, cb_a_, *sock_z_, cb_z_);
 
-  sock_a_.Send(
+  sock_a_->Send(
       DcSctpMessage(StreamID(1), PPID(53), std::vector<uint8_t>(kMessageSize)),
       kSendOptions);
-  ExchangeMessages(sock_a_, cb_a_, sock_z_, cb_z_);
+  ExchangeMessages(*sock_a_, cb_a_, *sock_z_, cb_z_);
 }
 
 TEST_F(DcSctpSocketTest, TriggersOnBufferedAmountLowOnlyWhenCrossingThreshold) {
   static constexpr size_t kMessageSize = 1000;
   static constexpr size_t kBufferedAmountLowThreshold = kMessageSize * 1.5;
 
-  sock_a_.SetBufferedAmountLowThreshold(StreamID(1),
+  sock_a_->SetBufferedAmountLowThreshold(StreamID(1),
                                         kBufferedAmountLowThreshold);
   EXPECT_CALL(cb_a_, OnBufferedAmountLow).Times(0);
   ConnectSockets();
@@ -1557,18 +1559,18 @@
 
   // Add a few messages to fill up the congestion window. When that is full,
   // messages will start to be fully buffered.
-  while (sock_a_.buffered_amount(StreamID(1)) <= kBufferedAmountLowThreshold) {
-    sock_a_.Send(DcSctpMessage(StreamID(1), PPID(53),
+  while (sock_a_->buffered_amount(StreamID(1)) <= kBufferedAmountLowThreshold) {
+    sock_a_->Send(DcSctpMessage(StreamID(1), PPID(53),
                                std::vector<uint8_t>(kMessageSize)),
                  kSendOptions);
   }
-  size_t initial_buffered = sock_a_.buffered_amount(StreamID(1));
+  size_t initial_buffered = sock_a_->buffered_amount(StreamID(1));
   ASSERT_GT(initial_buffered, kBufferedAmountLowThreshold);
 
   // Start ACKing packets, which will empty the send queue, and trigger the
   // callback.
   EXPECT_CALL(cb_a_, OnBufferedAmountLow(StreamID(1))).Times(1);
-  ExchangeMessages(sock_a_, cb_a_, sock_z_, cb_z_);
+  ExchangeMessages(*sock_a_, cb_a_, *sock_z_, cb_z_);
 }
 
 TEST_F(DcSctpSocketTest, DoesntTriggerOnTotalBufferAmountLowWhenBelow) {
@@ -1576,11 +1578,11 @@
 
   EXPECT_CALL(cb_a_, OnTotalBufferedAmountLow).Times(0);
 
-  sock_a_.Send(DcSctpMessage(StreamID(1), PPID(53),
+  sock_a_->Send(DcSctpMessage(StreamID(1), PPID(53),
                              std::vector<uint8_t>(kLargeMessageSize)),
                kSendOptions);
 
-  ExchangeMessages(sock_a_, cb_a_, sock_z_, cb_z_);
+  ExchangeMessages(*sock_a_, cb_a_, *sock_z_, cb_z_);
 }
 
 TEST_F(DcSctpSocketTest, TriggersOnTotalBufferAmountLowWhenCrossingThreshold) {
@@ -1590,7 +1592,7 @@
 
   // Fill up the send queue completely.
   for (;;) {
-    if (sock_a_.Send(DcSctpMessage(StreamID(1), PPID(53),
+    if (sock_a_->Send(DcSctpMessage(StreamID(1), PPID(53),
                                    std::vector<uint8_t>(kLargeMessageSize)),
                      kSendOptions) == SendStatus::kErrorResourceExhaustion) {
       break;
@@ -1598,11 +1600,11 @@
   }
 
   EXPECT_CALL(cb_a_, OnTotalBufferedAmountLow).Times(1);
-  ExchangeMessages(sock_a_, cb_a_, sock_z_, cb_z_);
+  ExchangeMessages(*sock_a_, cb_a_, *sock_z_, cb_z_);
 }
 
 TEST_F(DcSctpSocketTest, InitialMetricsAreZeroed) {
-  Metrics metrics = sock_a_.GetMetrics();
+  Metrics metrics = sock_a_->GetMetrics();
   EXPECT_EQ(metrics.tx_packets_count, 0u);
   EXPECT_EQ(metrics.tx_messages_count, 0u);
   EXPECT_EQ(metrics.cwnd_bytes.has_value(), false);
@@ -1619,72 +1621,72 @@
   const size_t initial_a_rwnd = options_.max_receiver_window_buffer_size *
                                 ReassemblyQueue::kHighWatermarkLimit;
 
-  EXPECT_EQ(sock_a_.GetMetrics().tx_packets_count, 2u);
-  EXPECT_EQ(sock_a_.GetMetrics().rx_packets_count, 2u);
-  EXPECT_EQ(sock_a_.GetMetrics().tx_messages_count, 0u);
-  EXPECT_EQ(*sock_a_.GetMetrics().cwnd_bytes,
+  EXPECT_EQ(sock_a_->GetMetrics().tx_packets_count, 2u);
+  EXPECT_EQ(sock_a_->GetMetrics().rx_packets_count, 2u);
+  EXPECT_EQ(sock_a_->GetMetrics().tx_messages_count, 0u);
+  EXPECT_EQ(*sock_a_->GetMetrics().cwnd_bytes,
             options_.cwnd_mtus_initial * options_.mtu);
-  EXPECT_EQ(sock_a_.GetMetrics().unack_data_count, 0u);
+  EXPECT_EQ(sock_a_->GetMetrics().unack_data_count, 0u);
 
-  EXPECT_EQ(sock_z_.GetMetrics().rx_packets_count, 2u);
-  EXPECT_EQ(sock_z_.GetMetrics().rx_messages_count, 0u);
+  EXPECT_EQ(sock_z_->GetMetrics().rx_packets_count, 2u);
+  EXPECT_EQ(sock_z_->GetMetrics().rx_messages_count, 0u);
 
-  sock_a_.Send(DcSctpMessage(StreamID(1), PPID(53), {1, 2}), kSendOptions);
-  EXPECT_EQ(sock_a_.GetMetrics().unack_data_count, 1u);
+  sock_a_->Send(DcSctpMessage(StreamID(1), PPID(53), {1, 2}), kSendOptions);
+  EXPECT_EQ(sock_a_->GetMetrics().unack_data_count, 1u);
 
-  sock_z_.ReceivePacket(cb_a_.ConsumeSentPacket());  // DATA
-  sock_a_.ReceivePacket(cb_z_.ConsumeSentPacket());  // SACK
-  EXPECT_EQ(*sock_a_.GetMetrics().peer_rwnd_bytes, initial_a_rwnd);
-  EXPECT_EQ(sock_a_.GetMetrics().unack_data_count, 0u);
+  sock_z_->ReceivePacket(cb_a_.ConsumeSentPacket());  // DATA
+  sock_a_->ReceivePacket(cb_z_.ConsumeSentPacket());  // SACK
+  EXPECT_EQ(*sock_a_->GetMetrics().peer_rwnd_bytes, initial_a_rwnd);
+  EXPECT_EQ(sock_a_->GetMetrics().unack_data_count, 0u);
 
   EXPECT_TRUE(cb_z_.ConsumeReceivedMessage().has_value());
 
-  EXPECT_EQ(sock_a_.GetMetrics().tx_packets_count, 3u);
-  EXPECT_EQ(sock_a_.GetMetrics().rx_packets_count, 3u);
-  EXPECT_EQ(sock_a_.GetMetrics().tx_messages_count, 1u);
+  EXPECT_EQ(sock_a_->GetMetrics().tx_packets_count, 3u);
+  EXPECT_EQ(sock_a_->GetMetrics().rx_packets_count, 3u);
+  EXPECT_EQ(sock_a_->GetMetrics().tx_messages_count, 1u);
 
-  EXPECT_EQ(sock_z_.GetMetrics().rx_packets_count, 3u);
-  EXPECT_EQ(sock_z_.GetMetrics().rx_messages_count, 1u);
+  EXPECT_EQ(sock_z_->GetMetrics().rx_packets_count, 3u);
+  EXPECT_EQ(sock_z_->GetMetrics().rx_messages_count, 1u);
 
   // Send one more (large - fragmented), and receive the delayed SACK.
-  sock_a_.Send(DcSctpMessage(StreamID(1), PPID(53),
+  sock_a_->Send(DcSctpMessage(StreamID(1), PPID(53),
                              std::vector<uint8_t>(options_.mtu * 2 + 1)),
                kSendOptions);
-  EXPECT_EQ(sock_a_.GetMetrics().unack_data_count, 3u);
+  EXPECT_EQ(sock_a_->GetMetrics().unack_data_count, 3u);
 
-  sock_z_.ReceivePacket(cb_a_.ConsumeSentPacket());  // DATA
-  sock_z_.ReceivePacket(cb_a_.ConsumeSentPacket());  // DATA
+  sock_z_->ReceivePacket(cb_a_.ConsumeSentPacket());  // DATA
+  sock_z_->ReceivePacket(cb_a_.ConsumeSentPacket());  // DATA
 
-  sock_a_.ReceivePacket(cb_z_.ConsumeSentPacket());  // SACK
-  EXPECT_EQ(sock_a_.GetMetrics().unack_data_count, 1u);
-  EXPECT_GT(*sock_a_.GetMetrics().peer_rwnd_bytes, 0u);
-  EXPECT_LT(*sock_a_.GetMetrics().peer_rwnd_bytes, initial_a_rwnd);
+  sock_a_->ReceivePacket(cb_z_.ConsumeSentPacket());  // SACK
+  EXPECT_EQ(sock_a_->GetMetrics().unack_data_count, 1u);
+  EXPECT_GT(*sock_a_->GetMetrics().peer_rwnd_bytes, 0u);
+  EXPECT_LT(*sock_a_->GetMetrics().peer_rwnd_bytes, initial_a_rwnd);
 
-  sock_z_.ReceivePacket(cb_a_.ConsumeSentPacket());  // DATA
+  sock_z_->ReceivePacket(cb_a_.ConsumeSentPacket());  // DATA
 
   EXPECT_TRUE(cb_z_.ConsumeReceivedMessage().has_value());
 
-  EXPECT_EQ(sock_a_.GetMetrics().tx_packets_count, 6u);
-  EXPECT_EQ(sock_a_.GetMetrics().rx_packets_count, 4u);
-  EXPECT_EQ(sock_a_.GetMetrics().tx_messages_count, 2u);
+  EXPECT_EQ(sock_a_->GetMetrics().tx_packets_count, 6u);
+  EXPECT_EQ(sock_a_->GetMetrics().rx_packets_count, 4u);
+  EXPECT_EQ(sock_a_->GetMetrics().tx_messages_count, 2u);
 
-  EXPECT_EQ(sock_z_.GetMetrics().rx_packets_count, 6u);
-  EXPECT_EQ(sock_z_.GetMetrics().rx_messages_count, 2u);
+  EXPECT_EQ(sock_z_->GetMetrics().rx_packets_count, 6u);
+  EXPECT_EQ(sock_z_->GetMetrics().rx_messages_count, 2u);
 
   // Delayed sack
   AdvanceTime(options_.delayed_ack_max_timeout);
   RunTimers();
 
-  sock_a_.ReceivePacket(cb_z_.ConsumeSentPacket());  // SACK
-  EXPECT_EQ(sock_a_.GetMetrics().unack_data_count, 0u);
-  EXPECT_EQ(sock_a_.GetMetrics().rx_packets_count, 5u);
-  EXPECT_EQ(*sock_a_.GetMetrics().peer_rwnd_bytes, initial_a_rwnd);
+  sock_a_->ReceivePacket(cb_z_.ConsumeSentPacket());  // SACK
+  EXPECT_EQ(sock_a_->GetMetrics().unack_data_count, 0u);
+  EXPECT_EQ(sock_a_->GetMetrics().rx_packets_count, 5u);
+  EXPECT_EQ(*sock_a_->GetMetrics().peer_rwnd_bytes, initial_a_rwnd);
 }
 
 TEST_F(DcSctpSocketTest, UnackDataAlsoIncludesSendQueue) {
   ConnectSockets();
 
-  sock_a_.Send(DcSctpMessage(StreamID(1), PPID(53),
+  sock_a_->Send(DcSctpMessage(StreamID(1), PPID(53),
                              std::vector<uint8_t>(kLargeMessageSize)),
                kSendOptions);
   size_t payload_bytes =
@@ -1699,24 +1701,24 @@
 
   // Due to alignment, padding etc, it's hard to calculate the exact number, but
   // it should be in this range.
-  EXPECT_GE(sock_a_.GetMetrics().unack_data_count,
+  EXPECT_GE(sock_a_->GetMetrics().unack_data_count,
             expected_sent_packets + expected_queued_packets);
 
-  EXPECT_LE(sock_a_.GetMetrics().unack_data_count,
+  EXPECT_LE(sock_a_->GetMetrics().unack_data_count,
             expected_sent_packets + expected_queued_packets + 2);
 }
 
 TEST_F(DcSctpSocketTest, DoesntSendMoreThanMaxBurstPackets) {
   ConnectSockets();
 
-  sock_a_.Send(DcSctpMessage(StreamID(1), PPID(53),
+  sock_a_->Send(DcSctpMessage(StreamID(1), PPID(53),
                              std::vector<uint8_t>(kLargeMessageSize)),
                kSendOptions);
 
   for (int i = 0; i < kMaxBurstPackets; ++i) {
     std::vector<uint8_t> packet = cb_a_.ConsumeSentPacket();
     EXPECT_THAT(packet, Not(IsEmpty()));
-    sock_z_.ReceivePacket(std::move(packet));  // DATA
+    sock_z_->ReceivePacket(std::move(packet));  // DATA
   }
 
   EXPECT_THAT(cb_a_.ConsumeSentPacket(), IsEmpty());
@@ -1727,7 +1729,7 @@
 
   // A really large message, to ensure that the congestion window is often full.
   constexpr size_t kMessageSize = 100000;
-  sock_a_.Send(
+  sock_a_->Send(
       DcSctpMessage(StreamID(1), PPID(53), std::vector<uint8_t>(kMessageSize)),
       kSendOptions);
 
@@ -1739,12 +1741,12 @@
     if (!packet_from_a.empty()) {
       data_packet_sizes.push_back(packet_from_a.size());
       delivered_packet = true;
-      sock_z_.ReceivePacket(std::move(packet_from_a));
+      sock_z_->ReceivePacket(std::move(packet_from_a));
     }
     std::vector<uint8_t> packet_from_z = cb_z_.ConsumeSentPacket();
     if (!packet_from_z.empty()) {
       delivered_packet = true;
-      sock_a_.ReceivePacket(std::move(packet_from_z));
+      sock_a_->ReceivePacket(std::move(packet_from_z));
     }
   } while (delivered_packet);
 
@@ -1778,31 +1780,31 @@
 
   constexpr DurationMs kRtt = DurationMs(80);
   AdvanceTime(kRtt);
-  sock_z_.ReceivePacket(hb_req_a);
-  sock_a_.ReceivePacket(hb_req_z);
+  sock_z_->ReceivePacket(hb_req_a);
+  sock_a_->ReceivePacket(hb_req_z);
 
   // HEARTBEAT_ACK
-  sock_a_.ReceivePacket(cb_z_.ConsumeSentPacket());
-  sock_z_.ReceivePacket(cb_a_.ConsumeSentPacket());
+  sock_a_->ReceivePacket(cb_z_.ConsumeSentPacket());
+  sock_z_->ReceivePacket(cb_a_.ConsumeSentPacket());
 
   SendOptions send_options;
   send_options.max_retransmissions = 0;
   std::vector<uint8_t> payload(options_.mtu - 100);
 
   // Send an initial message that is received, but the SACK was lost
-  sock_a_.Send(DcSctpMessage(StreamID(1), PPID(51), payload), send_options);
+  sock_a_->Send(DcSctpMessage(StreamID(1), PPID(51), payload), send_options);
   // DATA
-  sock_z_.ReceivePacket(cb_a_.ConsumeSentPacket());
+  sock_z_->ReceivePacket(cb_a_.ConsumeSentPacket());
   // SACK (lost)
   std::vector<uint8_t> sack = cb_z_.ConsumeSentPacket();
 
   // Queue enough messages to fill the congestion window.
   do {
-    sock_a_.Send(DcSctpMessage(StreamID(1), PPID(51), payload), send_options);
+    sock_a_->Send(DcSctpMessage(StreamID(1), PPID(51), payload), send_options);
   } while (!cb_a_.ConsumeSentPacket().empty());
 
   // Enqueue at least one more.
-  sock_a_.Send(DcSctpMessage(StreamID(1), PPID(51), payload), send_options);
+  sock_a_->Send(DcSctpMessage(StreamID(1), PPID(51), payload), send_options);
 
   // Let all of them expire by T3-RTX and inspect what's sent.
   AdvanceTime(options_.rto_initial);
@@ -1825,7 +1827,7 @@
   }
 
   // Replay the SACK, and see if a FORWARD-TSN is sent again.
-  sock_a_.ReceivePacket(sack);
+  sock_a_->ReceivePacket(sack);
 
   // It shouldn't be sent as not enough time has passed yet. Instead, more
   // DATA chunks are sent, that are in the queue.
@@ -1837,7 +1839,7 @@
 
   // Now let RTT time pass, to allow a FORWARD-TSN to be sent again.
   AdvanceTime(kRtt);
-  sock_a_.ReceivePacket(sack);
+  sock_a_->ReceivePacket(sack);
 
   std::vector<uint8_t> sent4 = cb_a_.ConsumeSentPacket();
   ASSERT_HAS_VALUE_AND_ASSIGN(SctpPacket packet4, SctpPacket::Parse(sent4));