From 9f5b26d23fe0d666debc4526abe7a078601e20dc Mon Sep 17 00:00:00 2001 From: Javier Blazquez Date: Sun, 27 Oct 2019 17:16:24 -0700 Subject: 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 --- lib/vquic/ngtcp2.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'lib') diff --git a/lib/vquic/ngtcp2.c b/lib/vquic/ngtcp2.c index 864751101..c0f9b16e3 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; } -- cgit v1.2.3