Skip to content

Commit 50385b4

Browse files
authored
修复udp connect后再指定目标地址导致发送失败的bug (#278)
1 parent 5291682 commit 50385b4

File tree

1 file changed

+7
-1
lines changed

1 file changed

+7
-1
lines changed

src/Network/Socket.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)