@@ -67,6 +67,7 @@ Socket::Socket(EventPoller::Ptr poller, bool enable_mutex)
6767 , _mtx_event (enable_mutex)
6868 , _mtx_send_buf_waiting (enable_mutex)
6969 , _mtx_send_buf_sending (enable_mutex) {
70+ memset (&_peer_addr, 0 , sizeof _peer_addr);
7071 setOnRead (nullptr );
7172 setOnErr (nullptr );
7273 setOnAccept (nullptr );
@@ -396,6 +397,11 @@ ssize_t Socket::send(Buffer::Ptr buf, struct sockaddr *addr, socklen_t addr_len,
396397 // This send did not specify a target address, but the target is customized through bindPeerAddr
397398 addr = (struct sockaddr *)_udp_send_dst.get ();
398399 addr_len = SockUtil::get_sock_len (addr);
400+ } else {
401+ if (_peer_addr.ss_family != AF_UNSPEC) {
402+ // udp connect后不能再sendto指定其他地址
403+ return send_l (std::move (buf), false , try_flush);
404+ }
399405 }
400406 return send_l (std::make_shared<BufferSock>(std::move (buf), addr, addr_len), true , try_flush);
401407}
@@ -847,7 +853,7 @@ bool Socket::flushData(const SockNum::Ptr &sock, bool poller_thread) {
847853 // udp发送异常,把数据丢弃 [AUTO-TRANSLATED:3a7d095d]
848854 // UDP send exception, discard the data
849855 send_buf_sending_tmp.pop_front ();
850- WarnL << " Send udp socket[" << sock << " ] failed, data ignored: " << uv_strerror (err);
856+ WarnL << " Send udp socket[" << sock-> rawFd () << " ] failed, data ignored: " << uv_strerror (err);
851857 continue ;
852858 }
853859 // tcp发送失败时,触发异常 [AUTO-TRANSLATED:06f06449]
0 commit comments