diff --git a/src/multiplexed_socket.cpp b/src/multiplexed_socket.cpp
index 24712560993184591b3d0ad39d37efc73b98cafc..db4b0cba4d369ed2ed9c501bb273dc09010a98e7 100644
--- a/src/multiplexed_socket.cpp
+++ b/src/multiplexed_socket.cpp
@@ -460,9 +460,13 @@ MultiplexedSocket::Impl::handleControlPacket(std::vector<uint8_t>&& pkt)
                 if (pimpl.handleProtocolMsg(object))
                     continue;
                 auto req = object.as<ChannelRequest>();
-                if (req.state == ChannelRequestState::ACCEPT) {
+                if (req.state == ChannelRequestState::REQUEST) {
+                    pimpl.onRequest(req.name, req.channel);
+                }
+                else if (req.state == ChannelRequestState::ACCEPT) {
                     pimpl.onAccept(req.name, req.channel);
-                } else if (req.state == ChannelRequestState::DECLINE) {
+                } else {
+                    // DECLINE or unknown
                     std::lock_guard<std::mutex> lkSockets(pimpl.socketsMutex);
                     auto channel = pimpl.sockets.find(req.channel);
                     if (channel != pimpl.sockets.end()) {
@@ -470,8 +474,6 @@ MultiplexedSocket::Impl::handleControlPacket(std::vector<uint8_t>&& pkt)
                         channel->second->stop();
                         pimpl.sockets.erase(channel);
                     }
-                } else if (pimpl.onRequest_) {
-                    pimpl.onRequest(req.name, req.channel);
                 }
             }
         } catch (const std::exception& e) {