mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-02-04 06:12:07 +01:00
Merge bitcoin/bitcoin#28649: Do the SOCKS5 handshake reliably
af0fca530enetbase: use reliable send() during SOCKS5 handshake (Vasil Dimov)1b19d1117csock: change Sock::SendComplete() to take Span (Vasil Dimov) Pull request description: The `Socks5()` function which does the SOCKS5 handshake with the SOCKS5 proxy sends bytes to the socket without retrying partial writes. `send(2)` may write only part of the provided data and return. In this case the caller is responsible for retrying the operation with the remaining data. Change `Socks5()` to do that. There is already a method `Sock::SendComplete()` which does exactly that, so use it in `Socks5()`. A minor complication for this PR is that `Sock::SendComplete()` takes `std::string` argument whereas `Socks5()` has `std::vector<uint8_t>`. Thus the necessity for the first commit. It is possible to do also in other ways - convert the data in `Socks5()` to `std::string` or have just one `Sock::SendComplete()` that takes `void*` and change the callers to pass `str.data(), str.size()` or `vec.data(), vec.size()`. This came up while testing https://github.com/bitcoin/bitcoin/pull/27375. ACKs for top commit: achow101: ACKaf0fca530ejonatack: ACKaf0fca530epinheadmz: ACKaf0fca530eTree-SHA512: 1d4a53d0628f7607378038ac56dc3b8624ce9322b034c9547a0c3ce052eafb4b18213f258aa3b57bcb4d990a5e0548a37ec70af2bd55f6e8e6399936f1ce047a
This commit is contained in:
@@ -3219,7 +3219,6 @@ bool CConnman::Start(CScheduler& scheduler, const Options& connOptions)
|
||||
// Start threads
|
||||
//
|
||||
assert(m_msgproc);
|
||||
InterruptSocks5(false);
|
||||
interruptNet.reset();
|
||||
flagInterruptMsgProc = false;
|
||||
|
||||
@@ -3291,7 +3290,7 @@ void CConnman::Interrupt()
|
||||
condMsgProc.notify_all();
|
||||
|
||||
interruptNet();
|
||||
InterruptSocks5(true);
|
||||
g_socks5_interrupt();
|
||||
|
||||
if (semOutbound) {
|
||||
for (int i=0; i<m_max_outbound; i++) {
|
||||
|
||||
Reference in New Issue
Block a user