bugfix: setkeepalive
failure on TLSv1.3
#2356
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
When TLSv1.3 is used, the server may send a NewSessionTicket message after the handshake. While this message is ssl-layer data,
tcpsock:sslhandshake
does not consume it.In the implementation of
setkeepalive
,recv
is used to confirm the connection is still open and there is no unread data in the buffer. But it treats the NewSessionTicket message as application layer data and thensetkeepalive
fails with this errorconnection in dubious state
.In fact we don't need to peek here, because if the application data is read successfully then the connection is going to be closed anyway. Therefore,
c->recv
can be used instead which will consume the ssl-layer data implicitly.A quick reproduction:
After the fix:
I hereby granted the copyright of the changes in this pull request
to the authors of this lua-nginx-module project.