From: Javier Blazquez Date: Mon, 28 Oct 2019 00:16:24 +0000 (-0700) Subject: HTTP3: fix invalid use of sendto for connected UDP socket X-Git-Tag: curl-7_67_0~14 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9f5b26d23fe0d666debc4526abe7a078601e20dc;p=thirdparty%2Fcurl.git HTTP3: fix invalid use of sendto for connected UDP socket On macOS/BSD, trying to call sendto on a connected UDP socket fails with a EISCONN error. Because the singleipconnect has already called connect on the socket when we're trying to use it for QUIC transfers we need to use plain send instead. Fixes #4529 Closes https://github.com/curl/curl/pull/4533 --- diff --git a/lib/vquic/ngtcp2.c b/lib/vquic/ngtcp2.c index 8647511012..c0f9b16e38 100644 --- a/lib/vquic/ngtcp2.c +++ b/lib/vquic/ngtcp2.c @@ -1544,9 +1544,7 @@ static CURLcode ng_flush_egress(struct connectdata *conn, int sockfd, } memcpy(&remote_addr, ps.path.remote.addr, ps.path.remote.addrlen); - while((sent = sendto(sockfd, out, outlen, 0, - (struct sockaddr *)&remote_addr, - (socklen_t)ps.path.remote.addrlen)) == -1 && + while((sent = send(sockfd, out, outlen, 0)) == -1 && SOCKERRNO == EINTR) ; @@ -1556,7 +1554,7 @@ static CURLcode ng_flush_egress(struct connectdata *conn, int sockfd, break; } else { - failf(conn->data, "sendto() returned %zd (errno %d)\n", sent, + failf(conn->data, "send() returned %zd (errno %d)\n", sent, SOCKERRNO); return CURLE_SEND_ERROR; }