From 368e93e9e8f3769d5a851cd7e913a607959b99d2 Mon Sep 17 00:00:00 2001 From: winlin Date: Mon, 6 Apr 2020 21:24:06 +0800 Subject: [PATCH] For #307, support use sendto or sendmsg when senmmsg(1 msg) --- trunk/src/service/srs_service_st.cpp | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/trunk/src/service/srs_service_st.cpp b/trunk/src/service/srs_service_st.cpp index 18c67de7e..dc558829d 100644 --- a/trunk/src/service/srs_service_st.cpp +++ b/trunk/src/service/srs_service_st.cpp @@ -429,11 +429,25 @@ int srs_sendmmsg(srs_netfd_t stfd, struct mmsghdr *msgvec, unsigned int vlen, in return vlen; #else if (vlen == 1) { - int r0 = srs_sendmsg(stfd, &msgvec->msg_hdr, flags, timeout); - if (r0 < 0) { - return r0; - } - msgvec->msg_len = r0; + #if 1 + int r0 = srs_sendmsg(stfd, &msgvec->msg_hdr, flags, timeout); + if (r0 < 0) { + return r0; + } + msgvec->msg_len = r0; + #else + int tolen = (int)msgvec->msg_hdr.msg_namelen; + const struct sockaddr* to = (const struct sockaddr*)msgvec->msg_hdr.msg_name; + for (int i = 0; i < msgvec->msg_hdr.msg_iovlen; i++) { + iovec* iov = msgvec->msg_hdr.msg_iov + i; + int r0 = srs_sendto(stfd, (void*)iov->iov_base, (int)iov->iov_len, to, tolen, timeout); + if (r0 < 0) { + return r0; + } + msgvec->msg_len += r0; + } + #endif + return 1; } return st_sendmmsg((st_netfd_t)stfd, msgvec, vlen, flags, (st_utime_t)timeout);