From daa495c5f24c966243488068e9d455733ca7e2bc Mon Sep 17 00:00:00 2001 From: mtdxc Date: Mon, 1 Sep 2025 12:58:18 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dudp=20connect=E5=90=8E?= =?UTF-8?q?=E5=86=8D=E6=8C=87=E5=AE=9A=E7=9B=AE=E6=A0=87=E5=9C=B0=E5=9D=80?= =?UTF-8?q?=E5=AF=BC=E8=87=B4=E5=8F=91=E9=80=81=E5=A4=B1=E8=B4=A5=E7=9A=84?= =?UTF-8?q?bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Network/Socket.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Network/Socket.cpp b/src/Network/Socket.cpp index f8a61325..bb545bf1 100644 --- a/src/Network/Socket.cpp +++ b/src/Network/Socket.cpp @@ -67,6 +67,7 @@ Socket::Socket(EventPoller::Ptr poller, bool enable_mutex) , _mtx_event(enable_mutex) , _mtx_send_buf_waiting(enable_mutex) , _mtx_send_buf_sending(enable_mutex) { + memset(&_peer_addr, 0, sizeof _peer_addr); setOnRead(nullptr); setOnErr(nullptr); setOnAccept(nullptr); @@ -396,6 +397,11 @@ ssize_t Socket::send(Buffer::Ptr buf, struct sockaddr *addr, socklen_t addr_len, //This send did not specify a target address, but the target is customized through bindPeerAddr addr = (struct sockaddr *)_udp_send_dst.get(); addr_len = SockUtil::get_sock_len(addr); + } else { + if (_peer_addr.ss_family != AF_UNSPEC) { + // udp connect后不能再sendto指定其他地址 + return send_l(std::move(buf), false, try_flush); + } } return send_l(std::make_shared(std::move(buf), addr, addr_len), true, try_flush); } @@ -847,7 +853,7 @@ bool Socket::flushData(const SockNum::Ptr &sock, bool poller_thread) { // udp发送异常,把数据丢弃 [AUTO-TRANSLATED:3a7d095d] //UDP send exception, discard the data send_buf_sending_tmp.pop_front(); - WarnL << "Send udp socket[" << sock << "] failed, data ignored: " << uv_strerror(err); + WarnL << "Send udp socket[" << sock->rawFd() << "] failed, data ignored: " << uv_strerror(err); continue; } // tcp发送失败时,触发异常 [AUTO-TRANSLATED:06f06449]