From 5930f72cefc8f31673d3af56193e71b9590b0f37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Ma=C5=82ecki?= Date: Wed, 24 Feb 2021 17:39:58 +0100 Subject: [PATCH] [core][apps] Fixed wrong +W epoll for listener socket --- srtcore/core.cpp | 16 +++++----------- testing/testmedia.cpp | 4 ++-- 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/srtcore/core.cpp b/srtcore/core.cpp index a2198e9d8..e9d7b491a 100644 --- a/srtcore/core.cpp +++ b/srtcore/core.cpp @@ -10008,6 +10008,11 @@ int CUDT::processConnectRequest(const sockaddr_any& addr, CPacket& packet) HLOGC(cnlog.Debug, log << "processConnectRequest: received a connection request"); + // NOTE (IMPORTANT!!!) + // + // The current CUDT object represents a LISTENER SOCKET to which + // the request was redirected from the receiver queue. + if (m_bClosing) { m_RejectReason = SRT_REJ_CLOSE; @@ -10323,17 +10328,6 @@ int CUDT::processConnectRequest(const sockaddr_any& addr, CPacket& packet) m_pSndQueue->sendto(addr, packet); } // new connection response should be sent in acceptAndRespond() - // turn the socket writable if this is the first time when this was found out. - else - { - // a new connection has been created, enable epoll for write - HLOGC(cnlog.Debug, log << "processConnectRequest: @" << m_SocketID - << " connected, setting epoll to connect:"); - - // Note: not using SRT_EPOLL_CONNECT symbol because this is a procedure - // executed for the accepted socket. - s_UDTUnited.m_EPoll.update_events(m_SocketID, m_sPollID, SRT_EPOLL_OUT, true); - } } LOGC(cnlog.Note, log << "listen ret: " << hs.m_iReqType << " - " << RequestTypeStr(hs.m_iReqType)); diff --git a/testing/testmedia.cpp b/testing/testmedia.cpp index 274207c65..159358b2d 100755 --- a/testing/testmedia.cpp +++ b/testing/testmedia.cpp @@ -482,7 +482,7 @@ void SrtCommon::PrepareListener(string host, int port, int backlog) if (!m_blocking_mode) { - srt_conn_epoll = AddPoller(m_bindsock, SRT_EPOLL_OUT); + srt_conn_epoll = AddPoller(m_bindsock, SRT_EPOLL_IN); } auto sa = CreateAddr(host, port); @@ -531,7 +531,7 @@ void SrtCommon::AcceptNewClient() int len = 2; SRTSOCKET ready[2]; - while (srt_epoll_wait(srt_conn_epoll, 0, 0, ready, &len, 1000, 0, 0, 0, 0) == -1) + while (srt_epoll_wait(srt_conn_epoll, ready, &len, 0, 0, 1000, 0, 0, 0, 0) == -1) { if (::transmit_int_state) Error("srt_epoll_wait for srt_accept: interrupt");