python ssl套接字操作错误尝试对非套接字的对象执行操作
因此,在别人说这是重复之前,我已经看到了多个错误的问题,但没有注意到任何一个问题与我的问题相同 我试图创建一个包含SSL套接字的小项目,当试图捕获用户是否尝试使用原始套接字而不是SSL包装的套接字(这会引发ConnectionResetError)进行连接时,我得到了一个不同的错误 我的代码:python ssl套接字操作错误尝试对非套接字的对象执行操作,python,sockets,ssl,Python,Sockets,Ssl,因此,在别人说这是重复之前,我已经看到了多个错误的问题,但没有注意到任何一个问题与我的问题相同 我试图创建一个包含SSL套接字的小项目,当试图捕获用户是否尝试使用原始套接字而不是SSL包装的套接字(这会引发ConnectionResetError)进行连接时,我得到了一个不同的错误 我的代码: import socket from classes import ClientThread import ssl from time import sleep server = 'localhost'
import socket
from classes import ClientThread
import ssl
from time import sleep
server = 'localhost'
port = 12345
threads = []
context = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
context.load_cert_chain(certfile="cert.pem", keyfile="cert.pem")
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((server, port))
print(f"[*] server started, listening on port {port}")
while True:
s.listen()
with context.wrap_socket(s, server_side=True) as ssock:
try:
conn, addr = ssock.accept()
client = ClientThread(conn=conn, ip=addr[0], port=addr[1])
client.start()
threads.append(client)
print(f'Threads running: {len(threads)}')
except ConnectionResetError:
print(f'Could not establish ssl handshake with a client.')
我得到的错误是:
Traceback (most recent call last):
File "C:/Users/x/x/server.py", line 17, in <module>
s.listen()
OSError: [WinError 10038] An operation was attempted on something that is not a socket
回溯(最近一次呼叫最后一次):
文件“C:/Users/x/x/server.py”,第17行,在
s、 听
OSError:[WinError 10038]尝试对非套接字的对象执行操作
我尝试在异常发生后设置一些睡眠时间,可能它需要重置套接字,但没有处理,尝试在While True的位置上玩一些,在重置整个套接字帮助时,我不想因为一个客户端没有尝试使用SSL套接字登录而重置所有客户端线程
我认为这与wrap_套接字有关,因为它修改了传递给它的套接字实例,但找不到展开的方法
提前谢谢你
listen
使套接字能够接收传入的连接请求(也称为“被动套接字”),并建立在任何给定时间网络堆栈中可挂起的这些请求的积压量<代码>接受接受其中一个连接。您可以调用listen
一次,并多次调用accept
将
listen
拉到while
之外,使其只被调用一次,以将其建立为侦听套接字。您应该只在循环之外调用listen一次。@t感谢您的回复,但它只接受一个连接,而不是多线程服务器。否,listen只允许套接字接收传入的连接请求,并设置一个限制,限制这些请求中有多少可以在TCP堆栈中被积压而不被接受<代码>接受等待连接进入。你听一次,接受很多次。在linux上,可以多次调用listen(但不正常)。我假设Windows或ssl的东西使事情有所不同,但无法测试。将侦听移到while之外,看看会发生什么。我没有看到这个问题的好dup,所以我提供了我的评论作为答案。顺便说一句,感谢堆栈跟踪,它使我们很容易发现问题行。令人惊讶的是,有多少人不这么做。