Skip to content

Commit 3fcdbe1

Browse files
socket_mode Connection: Add support for IPv6 (#1036)
* socket_mode Connection: Add support for IPv6 * socket_mode Connection: get ssl context via `ssl.create_default_context()`
1 parent 6443d1b commit 3fcdbe1

1 file changed

Lines changed: 5 additions & 21 deletions

File tree

slack_sdk/socket_mode/builtin/internals.py

Lines changed: 5 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -51,20 +51,11 @@ def _establish_new_socket_connection(
5151
if proxy is not None:
5252
parsed_proxy = urlparse(proxy)
5353
proxy_host, proxy_port = parsed_proxy.hostname, parsed_proxy.port or 80
54-
proxy_addr = socket.getaddrinfo(
55-
proxy_host,
56-
proxy_port,
57-
0,
58-
socket.SOCK_STREAM,
59-
socket.SOL_TCP,
60-
)[0]
61-
sock = socket.socket(proxy_addr[0], proxy_addr[1], proxy_addr[2])
54+
sock = socket.create_connection((proxy_host, proxy_port), receive_timeout)
6255
if hasattr(socket, "TCP_NODELAY"):
6356
sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
6457
if hasattr(socket, "SO_KEEPALIVE"):
6558
sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
66-
sock.settimeout(receive_timeout)
67-
sock.connect(proxy_addr[4]) # proxy address
6859
message = [f"CONNECT {server_hostname}:{server_port} HTTP/1.0"]
6960
if parsed_proxy.username is not None and parsed_proxy.password is not None:
7061
# In the case where the proxy is "http://{username}:{password}@{hostname}:{port}"
@@ -90,7 +81,7 @@ def _establish_new_socket_connection(
9081
f"Failed to connect to the proxy (proxy: {proxy}, connect status code: {status})"
9182
)
9283

93-
sock = ssl.SSLContext(ssl.PROTOCOL_SSLv23).wrap_socket(
84+
sock = ssl.create_default_context().wrap_socket(
9485
sock,
9586
do_handshake_on_connect=True,
9687
suppress_ragged_eofs=True,
@@ -99,27 +90,20 @@ def _establish_new_socket_connection(
9990
return sock
10091

10192
if server_port != 443:
102-
addr = socket.getaddrinfo(
103-
server_hostname, server_port, 0, socket.SOCK_STREAM, socket.SOL_TCP
104-
)[0]
10593
# only for library testing
10694
logger.info(
10795
f"Using non-ssl socket to connect ({server_hostname}:{server_port})"
10896
)
109-
sock = Socket(addr[0], addr[1], addr[2])
110-
sock.settimeout(3)
111-
sock.connect((server_hostname, server_port))
97+
sock = socket.create_connection((server_hostname, server_port), timeout=3)
11298
return sock
11399

114-
sock = Socket(type=ssl.SOCK_STREAM)
115-
sock = ssl.SSLContext(ssl.PROTOCOL_SSLv23).wrap_socket(
100+
sock = socket.create_connection((server_hostname, server_port), receive_timeout)
101+
sock = ssl.create_default_context().wrap_socket(
116102
sock,
117103
do_handshake_on_connect=True,
118104
suppress_ragged_eofs=True,
119105
server_hostname=server_hostname,
120106
)
121-
sock.settimeout(receive_timeout)
122-
sock.connect((server_hostname, server_port))
123107
return sock
124108

125109

0 commit comments

Comments
 (0)