Я пытаюсь отладить периодически возникающую ошибку ConnectionError низкого уровня (вероятно, происходящую на уровне TCP).
Для этого я создал многопроцессную программу, рассылающую спам на удаленный сайт, перехватывающую соответствующую ошибку и отслеживаю ее. трафик через Wireshark с целью захвата полного ошибочного TCP-сообщения.
В Wireshark сложно сопоставить ошибку с конкретным TCP-сообщением, так как там очень высокая пропускная способность (эта ошибка случается очень редко, поэтому мне нужно много им, чтобы увидеть, как это происходит один раз!), поэтому я хотел бы записать порт на стороне клиента, используемый в соединении, для каждого запроса (или, по крайней мере, для неудачных), чтобы я мог зарегистрировать это, когда произойдет ошибка, и найти виновный поток TCP .
Это решение с использованием socket.fromfd было самым близким, которое я нашел, за исключением того, что, конечно, оно здесь не работает, потому что исключение происходит во время выполнения запроса, поэтому r не работает. существует в случае ошибки, и я не могу получить доступ к fd.
Есть ли какой-нибудь способ получить/создать сокет перед отправкой запроса, чтобы я мог знать, какой клиентский порт будет использоваться? Или какой-то крючок, возможно, в urllib3 после создания сокета, но до начала TCP-разговора, где я могу получить к нему доступ/записать его?
Подробнее здесь: https://stackoverflow.com/questions/786 ... -a-request