Age | Commit message (Collapse) | Author |
|
|
|
When a AF_LOCAL file descriptor is created externally (e.g. Unix
Domain Socket) and passed to `gen_tcp:listen(0, [{fd, FD}])`, the
implementation incorrectly assigned the address family to be equal
to `inet`, which in the inet_drv driver translated to AF_INET instead
of AF_LOCAL (or AF_UNIX), and an `einval` error code was returned.
This patch fixes this problem such that the file descriptors of the
`local` address family are supported in the inet:fdopen/5,
gen_tcp:connect/3, gen_tcp:listen/2, gen_udp:open/2 calls
|
|
|
|
Conflicts:
OTP_VERSION
erts/doc/src/notes.xml
erts/vsn.mk
lib/kernel/doc/src/notes.xml
lib/kernel/src/kernel.appup.src
lib/kernel/vsn.mk
lib/ssl/doc/src/notes.xml
lib/ssl/src/ssl.appup.src
lib/ssl/src/ssl_cipher.erl
lib/ssl/vsn.mk
otp_versions.table
|
|
* soranoba/fix-file-position/PR-646:
Unify internal error handling
Fix file:pread and :pwrite to use character encoding
Clean up code for file:position/2
Fix file:position (not raw mode)
OTP-13155
|
|
|
|
|
|
|
|
|
|
|
|
* weiss/case-insensitive-lookups:
inet_res: Make host name lookups case-insensitive
OTP-13083
|
|
A new {line_delimiter, byte()} option allows line-oriented TCP-based
protocols to use a custom line delimiting character. It is to be
used in conjunction with {packet, line}.
This option also works with erlang:decode_packet/3 when its first argument
is 'line'.
|
|
OTP-13040
* stolen/unified_dist:
kernel: inet6_tcp_dist: reuse inet_tcp_dist code
Conflicts:
lib/kernel/src/inet_tcp_dist.erl
|
|
The include file inet_dns_record_adts.hrl is generated by the
Perl script inet_dns_record_adts.pl in a non-deterministic way.
That is, every time the script is run, the functions will be in
a different order. That will cause inet_dns.beam in the primary
bootstrap to be updated every time the bootstrap is updated,
even though there is no actual code change.
Modify the Perl script to sort the keys pulled out from hashes
to make the order deterministic.
|
|
This partly reverts commit 8152505ea3793037984a7f3349ac95cc20c4e44c.
|
|
|
|
|
|
* nybek/fix_so_linger_zero__simple:
Update prim_inet.beam
Fix socket option {linger, {true, 0}} to abort TCP connections
Apply 'show_econnreset' socket option to send errors as well
Add 'show_econnreset' TCP socket option
|
|
|
|
* egil/fix-cover-error_logger/OTP-12818:
cover: Unstick modules before loading remote
kernel: Add module name to sticky_dir error message
kernel: Remove ?line macros in error_logger_warn_SUITE
|
|
* richcarl/avoid-try-native-load:
Update list of funcalls in kernel code_SUITE
Move architecture knowledge out of hipe loader
Avoid repeated calls to system_info in hipe loader
Avoid exception overhead if HiPE is disabled
HiPE help shouldn't modify the calling process
OTP-12816
|
|
An ECONNRESET is a socket error which tells us that a TCP peer has sent
an RST. The RST indicates that they have aborted the connection and
that the payload we have received should not be considered complete. Up
until now, the implementation of TCP in inet_drv.c has hidden the
receipt of the RST from the user, treating it as though it was just
a FIN terminating the read side of the socket.
There are many cases where user code needs to be able to distinguish
between a socket that was closed normally and one that was aborted.
Setting the option {show_econnreset, true} enables the user to receive
ECONNRESET errors on both active and passive sockets.
A connected socket returned from gen_tcp:accept/1 will inherit the
show_econnreset setting of the listening socket.
By default this option is set to {show_econnreset, false}.
Note that this patch only enables the reporting of ECONNRESET when
the socket is being read from. It does not report ECONNRESET (or
EPIPE) when the user tries to write to a connection when an RST
has already been received. Currently the TCP implementation in
inet_drv.c hides all such send errors from the user in favour
of returning {error, close}. A separate patch will be needed to
enable the reporting of such errors.
|
|
|
|
|
|
Make code_server be responsible for finding the architecture and deciding
whether to try to load native code, in order to avoid repeated calls to
system_info(hipe_architecture) and clumsy uses of try/catch to test if hipe
is enabled.
|
|
Make hipe_unified_loader not call system_info(hipe_architecture) repeatedly.
Also clean up some ugly architecture-dependent case switches.
|
|
|
|
* weiss/propagate-setopt-error:
Don't throw exception on prim_inet:setopt/3 error
OTP-12798
|
|
|
|
* nybek/limit_leading_zeros_in_ipv6_addresses:
Fix parsing of IPv6 addresses to limit leading zeros
OTP-12773
|
|
* bjorn/kernel/code-loading:
code: Eliminate dialyzer warnings for unmatched returns
|
|
* rickard/user_drv_q_bug/OTP-12239:
Fix usage of io-request queue
|
|
* richcarl/ac_tab-concurrency:
Use read_concurrency for application environment
|
|
We want to have the core applications of Erlang/OTP free from any
dialyzer warnings. Eliminate the warnings for unmatched returns
that were introduced in 7309ff4c3832.
|
|
The current implementations of inet:parse_ipv6_address/1 and
inet:parse_ipv6strict_address/1 permit address strings which have an
unlimited number of leading zeros. Addresses such as:
"0000000000000000000000000000000ffff::"
"::00000000000000000000000000000000000000000000000000000000"
"::0000000f435:1"
If we are using this facility to validate string representations of
IPv6 addresses, then we would end up validating addresses which are
non-conformant (with respect to RFC 4291 section 2.2) and potentially
dangerous.
This patch ensures that each segment of an IPv6 address has a maximum
of 4 hex digits.
|
|
* richcarl/md5-fixes:
code: Correct type spec for code:make_stub_module/3
|
|
|
|
|
|
* MSch/patch-1:
Remove erlang:display/1 calls
|
|
|
|
e47490f83e561a changed the size of Info argument tuple (third argument)
for code:make_stub_module/3 from 2 to 3, but did not update the
spec in code.erl.
|
|
* richcarl/md5-fixes:
Set module_info md5 for native modules properly
Add module_info entry for native code
Gracefully handle empty md5 field in module_info
Remove 'imports' key from spec of get_module_info()
|
|
|
|
7309ff4c38325 introduced a mismatch between
load_native_code_for_all_loaded/0 and its spec. We could just delete
spec, but it is cleaner to ensure that the function always returns
'ok'.
Noticed-by: Tuncer Ayaz
|
|
Use the md5 of the native code chunk instead of the Beam code md5.
|
|
* bjorn/kernel/code-loading:
kernel application: Start code server first
code: Reduce overhead of native code checking for loaded modules
|
|
When the code server has started, it will read the .beam files
for all loaded modules to see whether they contain native code
that should be loaded. To make that as fast as possible when
we have no native code, start the code server as early as possible
to minimize the number .beam files that must be read from disk.
The code server does not use the 'file' module, so it is OK to
start the code server before starting the file_server process.
On my computer, the time for checking the loaded modules for
native code is reduced from roughly 2 ms to 1.5 ms.
|
|
When the code server has been started, the function
load_native_code_for_all_loaded/0 will check whether the .beam
files for all loaded modules contain any native code. If there
is native code, it will be loaded.
If there is no native code, on my computer the check will take about
10 ms. That time can be reduced to about 2 ms if we replace the call
to code beam_lib:chunks/2 with a call to prim_file:read_file/1 to read
the file and a call to code:get_chunk/2 to check whether the chunk for
native code is present.
Furthermore, the entire check can be spawned off to a separate
process and done in parallel with OTP starting up.
|
|
* peppe/jcl_mode_improvements:
Fix problem with unitialized edlin text buffer
Fix shell crash when in switch command mode
OTP-12673
|
|
inet6_tcp_dist module is an old copy of inet_tcp_dist with changed
address family.
New features (such as listening port range, interface and generic
options) are implemented in inet_tcp_dist only, inet6_tcp_dist looks
abandoned (it does not even have tests).
This patch makes inet_tcp_dist internals work with abstract driver,
and inet6_tcp_dist becomes just a thin wrapper for it.
|