1
0
mirror of https://github.com/moparisthebest/curl synced 2024-12-23 08:38:49 -05:00
curl/lib
Cristian Rodríguez 25b4e158e9
connect: defer port selection until connect() time
If supported, defer port selection until connect() time
if --interface is given and source port is 0.

Reproducer:

* start fast webserver on port 80
* starve system of ephemeral ports
$  sysctl net.ipv4.ip_local_port_range="60990 60999"

* start a curl/libcurl "crawler"
$curl --keepalive --parallel --parallel-immediate --head --interface
127.0.0.2 "http://127.0.0.[1-254]/file[001-002].txt"

current result:
(possible some successful data)
curl: (45) bind failed with errno 98: Address already in use

result after patch:
(complete success or few connections failing, higlhy depending on load)

Fail only when all the possible 4-tuple combinations are exhausted,
which is impossible to do when port is selected at bind() time becuse
the kernel does not know if socket will be listen()'ed on or connect'ed
yet.

Closes #6295
2020-12-10 08:55:42 +01:00
..
vauth copyright: fix year ranges 2020-11-05 08:22:10 +01:00
vquic quiche: close the connection 2020-12-02 22:50:39 +01:00
vssh infof/failf calls: fix format specifiers 2020-11-24 13:18:41 +01:00
vtls openssl: make the OCSP verification verify the certificate id 2020-12-07 09:27:10 +01:00
.gitattributes test122[12]: remove these two tests 2020-10-15 07:56:19 +02:00
.gitignore VC: remove the makefile.vc6 build infra 2017-01-23 14:27:32 +01:00
altsvc.c altsvc: minimize variable scope and avoid "DEAD_STORE" 2020-11-07 18:10:21 +01:00
altsvc.h curl.se: new home 2020-11-04 23:59:47 +01:00
amigaos.c copyright: fix year ranges 2020-11-05 08:22:10 +01:00
amigaos.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
arpa_telnet.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
asyn-ares.c asyn: use 'struct thread_data *' instead of 'void *' 2020-11-23 22:54:18 +01:00
asyn-thread.c asyn: use 'struct thread_data *' instead of 'void *' 2020-11-23 22:54:18 +01:00
asyn.h curl.se: new home 2020-11-04 23:59:47 +01:00
base64.c curl.se: new home 2020-11-04 23:59:47 +01:00
checksrc.pl curl.se: new home 2020-11-04 23:59:47 +01:00
CMakeLists.txt cmake: use libcurl.rc in all Windows builds 2020-11-19 14:43:31 +01:00
config-amigaos.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
config-dos.h curl.se: new home 2020-11-04 23:59:47 +01:00
config-mac.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
config-os400.h curl.se: new home 2020-11-04 23:59:47 +01:00
config-plan9.h curl.se: new home 2020-11-04 23:59:47 +01:00
config-riscos.h curl.se: new home 2020-11-04 23:59:47 +01:00
config-tpf.h curl.se: new home 2020-11-04 23:59:47 +01:00
config-vxworks.h curl.se: new home 2020-11-04 23:59:47 +01:00
config-win32.h curl.se: new home 2020-11-04 23:59:47 +01:00
config-win32ce.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
conncache.c curl.se: new home 2020-11-04 23:59:47 +01:00
conncache.h curl.se: new home 2020-11-04 23:59:47 +01:00
connect.c connect: defer port selection until connect() time 2020-12-10 08:55:42 +01:00
connect.h ftp: retry getpeername for FTP with TCP_FASTOPEN 2020-12-06 11:18:28 +01:00
content_encoding.c curl.se: new home 2020-11-04 23:59:47 +01:00
content_encoding.h curl.se: new home 2020-11-04 23:59:47 +01:00
cookie.c curl.se: new home 2020-11-04 23:59:47 +01:00
cookie.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
curl_addrinfo.c curl.se: new home 2020-11-04 23:59:47 +01:00
curl_addrinfo.h curl.se: new home 2020-11-04 23:59:47 +01:00
curl_base64.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
curl_config.h.cmake cmake: check for linux/tcp.h 2020-12-01 12:32:55 +01:00
curl_ctype.c copyright: fix year ranges 2020-11-05 08:22:10 +01:00
curl_ctype.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
curl_des.c copyright: fix year ranges 2020-11-05 08:22:10 +01:00
curl_des.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
curl_endian.c copyright: fix year ranges 2020-11-05 08:22:10 +01:00
curl_endian.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
curl_fnmatch.c copyright: fix year ranges 2020-11-05 08:22:10 +01:00
curl_fnmatch.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
curl_get_line.c curl.se: new home 2020-11-04 23:59:47 +01:00
curl_get_line.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
curl_gethostname.c curl.se: new home 2020-11-04 23:59:47 +01:00
curl_gethostname.h curl.se: new home 2020-11-04 23:59:47 +01:00
curl_gssapi.c copyright: fix year ranges 2020-11-05 08:22:10 +01:00
curl_gssapi.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
curl_hmac.h curl.se: new home 2020-11-04 23:59:47 +01:00
curl_krb5.h curl.se: new home 2020-11-04 23:59:47 +01:00
curl_ldap.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
curl_md4.h curl.se: new home 2020-11-04 23:59:47 +01:00
curl_md5.h curl.se: new home 2020-11-04 23:59:47 +01:00
curl_memory.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
curl_memrchr.c copyright: fix year ranges 2020-11-05 08:22:10 +01:00
curl_memrchr.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
curl_multibyte.c curl.se: new home 2020-11-04 23:59:47 +01:00
curl_multibyte.h curl.se: new home 2020-11-04 23:59:47 +01:00
curl_ntlm_core.c ntlm: avoid malloc(0) on zero length user and domain 2020-11-29 11:24:54 +01:00
curl_ntlm_core.h curl.se: new home 2020-11-04 23:59:47 +01:00
curl_ntlm_wb.c curl.se: new home 2020-11-04 23:59:47 +01:00
curl_ntlm_wb.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
curl_path.c curl.se: new home 2020-11-04 23:59:47 +01:00
curl_path.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
curl_printf.h curl.se: new home 2020-11-04 23:59:47 +01:00
curl_range.c copyright: fix year ranges 2020-11-05 08:22:10 +01:00
curl_range.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
curl_rtmp.c curl.se: new home 2020-11-04 23:59:47 +01:00
curl_rtmp.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
curl_sasl.c curl.se: new home 2020-11-04 23:59:47 +01:00
curl_sasl.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
curl_setup_once.h curl.se: new home 2020-11-04 23:59:47 +01:00
curl_setup.h curl_setup: USE_RESOLVE_ON_IPS is for Apple native resolver use 2020-11-26 17:26:59 +01:00
curl_sha256.h curl.se: new home 2020-11-04 23:59:47 +01:00
curl_sspi.c curl.se: new home 2020-11-04 23:59:47 +01:00
curl_sspi.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
curl_threads.c curl.se: new home 2020-11-04 23:59:47 +01:00
curl_threads.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
curlx.h curl.se: new home 2020-11-04 23:59:47 +01:00
dict.c curl.se: new home 2020-11-04 23:59:47 +01:00
dict.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
doh.c curl.se: new home 2020-11-04 23:59:47 +01:00
doh.h curl.se: new home 2020-11-04 23:59:47 +01:00
dotdot.c curl.se: new home 2020-11-04 23:59:47 +01:00
dotdot.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
dynbuf.c curl.se: new home 2020-11-04 23:59:47 +01:00
dynbuf.h curl.se: new home 2020-11-04 23:59:47 +01:00
easy.c curl.se: new home 2020-11-04 23:59:47 +01:00
easygetopt.c curl.se: new home 2020-11-04 23:59:47 +01:00
easyif.h curl.se: new home 2020-11-04 23:59:47 +01:00
easyoptions.c curl.se: new home 2020-11-04 23:59:47 +01:00
easyoptions.h curl.se: new home 2020-11-04 23:59:47 +01:00
escape.c curl_easy_escape: limit output string length to 3 * max input 2020-11-09 23:01:06 +01:00
escape.h curl.se: new home 2020-11-04 23:59:47 +01:00
file.c file: avoid duplicated code sequence 2020-11-25 23:39:28 +01:00
file.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
fileinfo.c copyright: fix year ranges 2020-11-05 08:22:10 +01:00
fileinfo.h curl.se: new home 2020-11-04 23:59:47 +01:00
firefox-db2pem.sh curl.se: new home 2020-11-04 23:59:47 +01:00
formdata.c curl.se: new home 2020-11-04 23:59:47 +01:00
formdata.h curl.se: new home 2020-11-04 23:59:47 +01:00
ftp.c ftp: make wc_statemach loop instead of recurse 2020-12-07 09:25:48 +01:00
ftp.h curl.se: new home 2020-11-04 23:59:47 +01:00
ftplistparser.c curl.se: new home 2020-11-04 23:59:47 +01:00
ftplistparser.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
getenv.c curl.se: new home 2020-11-04 23:59:47 +01:00
getinfo.c curl.se: new home 2020-11-04 23:59:47 +01:00
getinfo.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
gopher.c docs/INTERNALS: remove reference to Curl_sendf() 2020-11-24 13:17:25 +01:00
gopher.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
hash.c curl.se: new home 2020-11-04 23:59:47 +01:00
hash.h curl.se: new home 2020-11-04 23:59:47 +01:00
hmac.c curl.se: new home 2020-11-04 23:59:47 +01:00
hostasyn.c curl.se: new home 2020-11-04 23:59:47 +01:00
hostcheck.c copyright: fix year ranges 2020-11-05 08:22:10 +01:00
hostcheck.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
hostip4.c curl.se: new home 2020-11-04 23:59:47 +01:00
hostip6.c curl.se: new home 2020-11-04 23:59:47 +01:00
hostip.c curl.se: new home 2020-11-04 23:59:47 +01:00
hostip.h curl.se: new home 2020-11-04 23:59:47 +01:00
hostsyn.c copyright: fix year ranges 2020-11-05 08:22:10 +01:00
hsts.c hsts: remove debug code leftovers 2020-11-06 08:22:14 +01:00
hsts.h curl.se: new home 2020-11-04 23:59:47 +01:00
http2.c infof/failf calls: fix format specifiers 2020-11-24 13:18:41 +01:00
http2.h curl.se: new home 2020-11-04 23:59:47 +01:00
http_chunks.c curl.se: new home 2020-11-04 23:59:47 +01:00
http_chunks.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
http_digest.c curl.se: new home 2020-11-04 23:59:47 +01:00
http_digest.h curl.se: new home 2020-11-04 23:59:47 +01:00
http_negotiate.c curl.se: new home 2020-11-04 23:59:47 +01:00
http_negotiate.h curl.se: new home 2020-11-04 23:59:47 +01:00
http_ntlm.c curl.se: new home 2020-11-04 23:59:47 +01:00
http_ntlm.h curl.se: new home 2020-11-04 23:59:47 +01:00
http_proxy.c urldata: remove 'void *protop' and create the union 'p' 2020-11-23 16:16:16 +01:00
http_proxy.h curl.se: new home 2020-11-04 23:59:47 +01:00
http.c infof/failf calls: fix format specifiers 2020-11-24 13:18:41 +01:00
http.h curl.se: new home 2020-11-04 23:59:47 +01:00
idn_win32.c curl.se: new home 2020-11-04 23:59:47 +01:00
if2ip.c curl.se: new home 2020-11-04 23:59:47 +01:00
if2ip.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
imap.c urldata: remove 'void *protop' and create the union 'p' 2020-11-23 16:16:16 +01:00
imap.h curl.se: new home 2020-11-04 23:59:47 +01:00
inet_ntop.c copyrights: fix copyright year range 2019-11-08 14:51:42 +01:00
inet_ntop.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
inet_pton.c checksrc: warn on space after exclamation mark 2020-10-02 16:35:53 +02:00
inet_pton.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
krb5.c sendf: move the verbose-check into Curl_debug 2020-11-02 22:49:36 +01:00
ldap.c infof/failf calls: fix format specifiers 2020-11-24 13:18:41 +01:00
libcurl.plist curl.se: new home 2020-11-04 23:59:47 +01:00
libcurl.rc copyright: fix year ranges 2020-11-05 08:22:10 +01:00
libcurl.vers.in
llist.c curl.se: new home 2020-11-04 23:59:47 +01:00
llist.h curl.se: new home 2020-11-04 23:59:47 +01:00
Makefile.am curl.se: new home 2020-11-04 23:59:47 +01:00
makefile.amiga curl.se: new home 2020-11-04 23:59:47 +01:00
makefile.dj curl.se: new home 2020-11-04 23:59:47 +01:00
Makefile.inc curl.se: new home 2020-11-04 23:59:47 +01:00
Makefile.m32 Makefile.m32: add support for UNICODE builds 2020-11-23 16:56:27 +00:00
Makefile.netware curl.se: new home 2020-11-04 23:59:47 +01:00
Makefile.vxworks curl.se: new home 2020-11-04 23:59:47 +01:00
md4.c curl.se: new home 2020-11-04 23:59:47 +01:00
md5.c curl.se: new home 2020-11-04 23:59:47 +01:00
memdebug.c curl.se: new home 2020-11-04 23:59:47 +01:00
memdebug.h curl.se: new home 2020-11-04 23:59:47 +01:00
mime.c curl.se: new home 2020-11-04 23:59:47 +01:00
mime.h curl.se: new home 2020-11-04 23:59:47 +01:00
mk-ca-bundle.pl curl.se: new home 2020-11-04 23:59:47 +01:00
mk-ca-bundle.vbs curl.se: new home 2020-11-04 23:59:47 +01:00
mprintf.c curl.se: new home 2020-11-04 23:59:47 +01:00
mqtt.c urldata: remove 'void *protop' and create the union 'p' 2020-11-23 16:16:16 +01:00
mqtt.h curl.se: new home 2020-11-04 23:59:47 +01:00
multi.c Revert "multi: implement wait using winsock events" 2020-12-06 22:40:38 +01:00
multihandle.h Revert "multi: implement wait using winsock events" 2020-12-06 22:40:38 +01:00
multiif.h curl.se: new home 2020-11-04 23:59:47 +01:00
netrc.c copyright: fix year ranges 2020-11-05 08:22:10 +01:00
netrc.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
non-ascii.c copyright: fix year ranges 2020-11-05 08:22:10 +01:00
non-ascii.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
nonblock.c copyright: fix year ranges 2020-11-05 08:22:10 +01:00
nonblock.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
nwlib.c curl.se: new home 2020-11-04 23:59:47 +01:00
nwos.c copyright: fix year ranges 2020-11-05 08:22:10 +01:00
openldap.c urldata: remove 'void *protop' and create the union 'p' 2020-11-23 16:16:16 +01:00
optiontable.pl curl.se: new home 2020-11-04 23:59:47 +01:00
parsedate.c curl.se: new home 2020-11-04 23:59:47 +01:00
parsedate.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
pingpong.c curl.se: new home 2020-11-04 23:59:47 +01:00
pingpong.h curl.se: new home 2020-11-04 23:59:47 +01:00
pop3.c urldata: remove 'void *protop' and create the union 'p' 2020-11-23 16:16:16 +01:00
pop3.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
progress.c Curl_pgrsStartNow: init speed limit time stamps at start 2020-11-09 08:19:09 +01:00
progress.h curl.se: new home 2020-11-04 23:59:47 +01:00
psl.c copyright: fix year ranges 2020-11-05 08:22:10 +01:00
psl.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
quic.h curl.se: new home 2020-11-04 23:59:47 +01:00
rand.c copyright: fix year ranges 2020-11-05 08:22:10 +01:00
rand.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
rename.c curl.se: new home 2020-11-04 23:59:47 +01:00
rename.h curl.se: new home 2020-11-04 23:59:47 +01:00
rtsp.c urldata: remove 'void *protop' and create the union 'p' 2020-11-23 16:16:16 +01:00
rtsp.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
select.c curl.se: new home 2020-11-04 23:59:47 +01:00
select.h curl.se: new home 2020-11-04 23:59:47 +01:00
sendf.c cmake: check for linux/tcp.h 2020-12-01 12:32:55 +01:00
sendf.h curl.se: new home 2020-11-04 23:59:47 +01:00
setopt.c cmake: check for linux/tcp.h 2020-12-01 12:32:55 +01:00
setopt.h curl.se: new home 2020-11-04 23:59:47 +01:00
setup-os400.h curl.se: new home 2020-11-04 23:59:47 +01:00
setup-vms.h curl.se: new home 2020-11-04 23:59:47 +01:00
setup-win32.h curl.se: new home 2020-11-04 23:59:47 +01:00
sha256.c curl.se: new home 2020-11-04 23:59:47 +01:00
share.c curl.se: new home 2020-11-04 23:59:47 +01:00
share.h curl.se: new home 2020-11-04 23:59:47 +01:00
sigpipe.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
slist.c copyright: fix year ranges 2020-11-05 08:22:10 +01:00
slist.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
smb.c urldata: remove 'void *protop' and create the union 'p' 2020-11-23 16:16:16 +01:00
smb.h curl.se: new home 2020-11-04 23:59:47 +01:00
smtp.c urldata: remove 'void *protop' and create the union 'p' 2020-11-23 16:16:16 +01:00
smtp.h curl.se: new home 2020-11-04 23:59:47 +01:00
sockaddr.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
socketpair.c curl.se: new home 2020-11-04 23:59:47 +01:00
socketpair.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
socks_gssapi.c infof/failf calls: fix format specifiers 2020-11-24 13:18:41 +01:00
socks_sspi.c curl.se: new home 2020-11-04 23:59:47 +01:00
socks.c socks: check for DNS entries with the right port number 2020-11-26 22:29:34 +01:00
socks.h curl.se: new home 2020-11-04 23:59:47 +01:00
speedcheck.c copyright: fix year ranges 2020-11-05 08:22:10 +01:00
speedcheck.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
splay.c splay: rename Curl_splayremovebyaddr to Curl_splayremove 2020-12-01 08:09:51 +01:00
splay.h splay: rename Curl_splayremovebyaddr to Curl_splayremove 2020-12-01 08:09:51 +01:00
strcase.c curl.se: new home 2020-11-04 23:59:47 +01:00
strcase.h curl.se: new home 2020-11-04 23:59:47 +01:00
strdup.c curl.se: new home 2020-11-04 23:59:47 +01:00
strdup.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
strerror.c curl.se: new home 2020-11-04 23:59:47 +01:00
strerror.h curl.se: new home 2020-11-04 23:59:47 +01:00
strtok.c curl.se: new home 2020-11-04 23:59:47 +01:00
strtok.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
strtoofft.c copyright: fix year ranges 2020-11-05 08:22:10 +01:00
strtoofft.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
system_win32.c curl.se: new home 2020-11-04 23:59:47 +01:00
system_win32.h curl.se: new home 2020-11-04 23:59:47 +01:00
telnet.c urldata: remove 'void *protop' and create the union 'p' 2020-11-23 16:16:16 +01:00
telnet.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
tftp.c curl.se: new home 2020-11-04 23:59:47 +01:00
tftp.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
timeval.c curl.se: new home 2020-11-04 23:59:47 +01:00
timeval.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
transfer.c urldata: remove 'void *protop' and create the union 'p' 2020-11-23 16:16:16 +01:00
transfer.h copyright: fix year ranges 2020-11-05 08:22:10 +01:00
url.c ftp: CURLOPT_FTP_SKIP_PASV_IP by default 2020-12-07 08:38:05 +01:00
url.h curl.se: new home 2020-11-04 23:59:47 +01:00
urlapi-int.h urlapi: don't accept blank port number field without scheme 2020-12-07 00:50:49 +01:00
urlapi.c urlapi: don't accept blank port number field without scheme 2020-12-07 00:50:49 +01:00
urldata.h urldata: restore comment on ssl_connect_data.use 2020-12-07 18:45:47 -05:00
version_win32.c curl.se: new home 2020-11-04 23:59:47 +01:00
version_win32.h curl.se: new home 2020-11-04 23:59:47 +01:00
version.c curl.se: new home 2020-11-04 23:59:47 +01:00
warnless.c copyright: fix year ranges 2020-11-05 08:22:10 +01:00
warnless.h curl.se: new home 2020-11-04 23:59:47 +01:00
wildcard.c copyright: fix year ranges 2020-11-05 08:22:10 +01:00
wildcard.h curl.se: new home 2020-11-04 23:59:47 +01:00
x509asn1.c curl.se: new home 2020-11-04 23:59:47 +01:00
x509asn1.h curl.se: new home 2020-11-04 23:59:47 +01:00