diff --git a/src/ice_transport.cpp b/src/ice_transport.cpp
index d0897f35758f4000dcae6fc9a44a9f64a46491e6..ab002f93ef9a736a092b9d3764f3c61345b2551e 100644
--- a/src/ice_transport.cpp
+++ b/src/ice_transport.cpp
@@ -1957,6 +1957,8 @@ IceSocketTransport::remoteAddr() const
 void
 IceSocket::close()
 {
+    if (ice_transport_)
+        ice_transport_->setOnRecv(compId_, {});
     ice_transport_.reset();
 }
 
diff --git a/src/media/socket_pair.cpp b/src/media/socket_pair.cpp
index fbe08b89d4b302761ddfd383b86584b6a2e5123a..7917b7de7eeb50f9a28ebbf5e1d7b0d5ff070736 100644
--- a/src/media/socket_pair.cpp
+++ b/src/media/socket_pair.cpp
@@ -189,22 +189,18 @@ SocketPair::SocketPair(std::unique_ptr<IceSocket> rtp_sock, std::unique_ptr<IceS
     : rtp_sock_(std::move(rtp_sock))
     , rtcp_sock_(std::move(rtcp_sock))
 {
-    auto queueRtpPacket = [this](uint8_t* buf, size_t len) {
+    rtp_sock_->setOnRecv([this](uint8_t* buf, size_t len) {
         std::lock_guard<std::mutex> l(dataBuffMutex_);
         rtpDataBuff_.emplace_back(buf, buf + len);
         cv_.notify_one();
         return len;
-    };
-
-    auto queueRtcpPacket = [this](uint8_t* buf, size_t len) {
+    });
+    rtcp_sock_->setOnRecv([this](uint8_t* buf, size_t len) {
         std::lock_guard<std::mutex> l(dataBuffMutex_);
         rtcpDataBuff_.emplace_back(buf, buf + len);
         cv_.notify_one();
         return len;
-    };
-
-    rtp_sock_->setOnRecv(queueRtpPacket);
-    rtcp_sock_->setOnRecv(queueRtcpPacket);
+    });
 }
 
 SocketPair::~SocketPair()