diff options
Diffstat (limited to 'yt_dlp/networking/_helper.py')
-rw-r--r-- | yt_dlp/networking/_helper.py | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/yt_dlp/networking/_helper.py b/yt_dlp/networking/_helper.py index 4c9dbf25d..a6fa3550b 100644 --- a/yt_dlp/networking/_helper.py +++ b/yt_dlp/networking/_helper.py @@ -11,7 +11,7 @@ import urllib.request from .exceptions import RequestError, UnsupportedRequest from ..dependencies import certifi -from ..socks import ProxyType +from ..socks import ProxyType, sockssocket from ..utils import format_field, traverse_obj if typing.TYPE_CHECKING: @@ -224,6 +224,24 @@ def _socket_connect(ip_addr, timeout, source_address): raise +def create_socks_proxy_socket(dest_addr, proxy_args, proxy_ip_addr, timeout, source_address): + af, socktype, proto, canonname, sa = proxy_ip_addr + sock = sockssocket(af, socktype, proto) + try: + connect_proxy_args = proxy_args.copy() + connect_proxy_args.update({'addr': sa[0], 'port': sa[1]}) + sock.setproxy(**connect_proxy_args) + if timeout is not socket._GLOBAL_DEFAULT_TIMEOUT: # noqa: E721 + sock.settimeout(timeout) + if source_address: + sock.bind(source_address) + sock.connect(dest_addr) + return sock + except socket.error: + sock.close() + raise + + def create_connection( address, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, |