diff options
author | Jameson Nash <vtjnash@gmail.com> | 2021-06-10 13:12:07 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-06-10 13:12:07 -0400 |
commit | 99eb736b4c81c8a00aa52ebd75de7198fbbcddbe (patch) | |
tree | 5fd471780dfba3408cf66edf67befc7e14dd2978 /docs/src/conf.py | |
parent | 6b0051d14decb22cab1ae7ee0adf0da99620cafe (diff) | |
download | libuv-99eb736b4c81c8a00aa52ebd75de7198fbbcddbe.tar.gz libuv-99eb736b4c81c8a00aa52ebd75de7198fbbcddbe.zip |
win,tcp: make uv_close work more like unix
This is an attempt to fix some resource management issues on Windows.
Win32 sockets have an issue where it sends an RST packet if there is an
outstanding overlapped calls. We can avoid that by being certain to
explicitly cancel our read and write requests first.
This also removes some conditional cleanup code, since we might as well
clean it up eagerly (like unix). Otherwise, it looks to me like these
might cause the accept callbacks to be run after the endgame had freed
the memory for them.
The comment here seems mixed up between send and recv buffers. The
default behavior on calling `closesocket` is already to do a graceful
shutdown (see
https://docs.microsoft.com/en-us/windows/win32/api/winsock/nf-winsock-closesocket
with default l_onoff=zero) if it is the last open handle. The expected
behavior if there are pending reads in flight is to send an RST packet,
notifying the client that the server connection was destroyed before
acknowledging the EOF.
Additionally, we need to cancel writes explicitly: we need to notify
Win32 that it is okay to cancel these writes (so it doesn't also
generate an RST packet on the wire).
Refs: https://github.com/libuv/libuv/pull/3035
Refs: https://github.com/nodejs/node/pull/35946
Refs: https://github.com/nodejs/node/issues/35904
Fixes: https://github.com/libuv/libuv/issues/3034
PR-URL: https://github.com/libuv/libuv/pull/3036
Reviewed-By: Santiago Gimeno <santiago.gimeno@gmail.com>
Diffstat (limited to 'docs/src/conf.py')
0 files changed, 0 insertions, 0 deletions