A command line tool and library for transferring data with URL syntax, supporting DICT, FILE, FTP, FTPS, GOPHER, GOPHERS, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, MQTT, POP3, POP3S, RTMP, RTMPS, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET, TFTP, WS and WSS. libcurl offers a myriad of powerful features
Find a file
Neil Horman 957eb240ed
osslq: use SSL_poll to determine writeability of QUIC streams
This discussion:
https://github.com/openssl/openssl/discussions/23339#discussion-6094341

Specifically item number 2 (Send Blocking) was raised by the curl team,
noting that SSL_want_write returning false was not a good indicator of
when a stream is writeable. The suggestion in that discussion was to use
SSL_poll with an SSL_POLL_EVENT_W flag instead, as that is a proper
indication of when an SSL_object will allow writing without blocking.

While ssl_want_write updates its state based on the last error
encountered (implying a need to retry an operation to update the
last_error state again), SSL_poll checks stream buffer status during the
call, giving it more up to date information on request. This is the
method used by our guide demos (quic-hq-interop specifically), and it
works well.

This change has been run through the curl test suite, and shown to pass
all tests. However, given the initial problem description I'm not sure
if there is a test case that explicitly checks for blocking and
unblocking of streams. As such some additional testing may be warranted.

Closes #15909
2025-01-08 23:52:49 +01:00
.circleci CI: update dependency wolfSSL/wolfssl to v5.7.6 2025-01-01 05:46:31 +01:00
.github vtls: feature ssls-export for SSL session im-/export 2025-01-08 23:32:07 +01:00
CMake cmake: pre-fill HAVE_STDINT_H on Windows 2025-01-07 15:37:36 +01:00
docs vtls: feature ssls-export for SSL session im-/export 2025-01-08 23:32:07 +01:00
include vtls: feature ssls-export for SSL session im-/export 2025-01-08 23:32:07 +01:00
lib osslq: use SSL_poll to determine writeability of QUIC streams 2025-01-08 23:52:49 +01:00
LICENSES copyright: update all copyright lines and remove year ranges 2023-01-03 09:19:21 +01:00
m4 vtls: feature ssls-export for SSL session im-/export 2025-01-08 23:32:07 +01:00
packages docs: use lowercase curl and libcurl 2025-01-02 17:15:54 +01:00
plan9 copyright: update all copyright lines and remove year ranges 2023-01-03 09:19:21 +01:00
projects vtls: feature ssls-export for SSL session im-/export 2025-01-08 23:32:07 +01:00
scripts scripts/delta: add number of days since first httpget release 2025-01-08 23:48:48 +01:00
src vtls: feature ssls-export for SSL session im-/export 2025-01-08 23:32:07 +01:00
tests HTTP/2: strip TE request header 2025-01-08 23:44:51 +01:00
winbuild vtls: feature ssls-export for SSL session im-/export 2025-01-08 23:32:07 +01:00
.dir-locals.el copyright: update all copyright lines and remove year ranges 2023-01-03 09:19:21 +01:00
.git-blame-ignore-revs copyright: update all copyright lines and remove year ranges 2023-01-03 09:19:21 +01:00
.gitattributes winbuild: MS-DOS batch tidy-ups 2024-07-02 19:26:15 +02:00
.gitignore gitignore: ignore output files created by mk-ca-bundle.pl 2024-12-22 03:11:51 -05:00
.mailmap dmaketgz: use --no-cache when building docker image 2024-12-05 15:41:53 +01:00
acinclude.m4 Makefile.mk: drop in favour of autotools and cmake (MS-DOS, AmigaOS3) 2024-12-16 23:20:55 +01:00
appveyor.sh appveyor: tidy up shell code 2025-01-08 18:16:50 +01:00
appveyor.yml appveyor: bump VS2008 jobs to VS2010 2025-01-08 12:33:31 +01:00
buildconf copyright: update all copyright lines and remove year ranges 2023-01-03 09:19:21 +01:00
buildconf.bat buildconf.bat: remove outdated groff/nroff use 2024-03-07 22:38:16 +01:00
CHANGES.md CHANGES: rename to CHANGES.md, no longer generated 2024-08-01 13:37:12 +02:00
CMakeLists.txt vtls: feature ssls-export for SSL session im-/export 2025-01-08 23:32:07 +01:00
configure.ac vtls: feature ssls-export for SSL session im-/export 2025-01-08 23:32:07 +01:00
COPYING COPYING: bump copyright year range to 1996 - 2025 2025-01-01 21:12:12 +01:00
curl-config.in curl-config: tidy up, optimize 2024-12-24 01:21:38 +01:00
Dockerfile Dockerfile: Update debian:bookworm-slim Docker digest to b73bf02 2024-12-03 09:25:09 +01:00
GIT-INFO.md docs: use lowercase curl and libcurl 2025-01-02 17:15:54 +01:00
libcurl.pc.in configure: do not echo most inherited LDFLAGS to config files 2024-11-14 09:55:45 +01:00
Makefile.am cmake: rename Windows detection cache file 2024-12-31 00:24:00 +01:00
Makefile.dist Makefile.mk: drop in favour of autotools and cmake (MS-DOS, AmigaOS3) 2024-12-16 23:20:55 +01:00
README docs: minor grammar fixes 2022-09-29 10:44:12 +02:00
README.md docs: use lowercase curl and libcurl 2025-01-02 17:15:54 +01:00
RELEASE-NOTES RELEASE-NOTES: synced 2025-01-06 14:11:15 +01:00
renovate.json GHA: drop "3" from openssl names and keys 2024-10-23 19:36:03 +02:00
REUSE.toml projects/Windows: remove wolfSSL from legacy projects 2024-12-22 03:10:35 -05:00
SECURITY.md docs: Clarify OpenSSF Best Practices vs Scorecard 2024-08-22 11:50:20 +02:00

curl logo

curl is a command-line tool for transferring data specified with URL syntax. Learn how to use curl by reading the manpage or everything curl.

Find out how to install curl by reading the INSTALL document.

libcurl is the library curl is using to do its job. It is readily available to be used by your software. Read the libcurl manpage to learn how.

Open Source

curl is Open Source and is distributed under an MIT-like license.

Contact

Contact us on a suitable mailing list or use GitHub issues/ pull requests/ discussions.

All contributors to the project are listed in the THANKS document.

Commercial support

For commercial support, maybe private and dedicated help with your problems or applications using (lib)curl visit the support page.

Website

Visit the curl website for the latest news and downloads.

Source code

Download the latest source from the Git server:

git clone https://github.com/curl/curl.git

Security problems

Report suspected security problems via our HackerOne page and not in public.

Notice

curl contains pieces of source code that is Copyright (c) 1998, 1999 Kungliga Tekniska Högskolan. This notice is included here to comply with the distribution terms.

Backers

Thank you to all our backers 🙏 Become a backer.

Sponsors

Support this project by becoming a sponsor.