pyOpenSSL und die WantReadError
Frage
Ich habe einen Socket-Server, die ich SSL zu bewegen über auf Python versuchen 2.5, aber ich habe in einen Baumstumpf mit pyOpenSSL laufen. Ich kann keine gut Tutorials zur Verwendung von ihm finden, so dass ich Betrieb weitgehend auf Vermutungen.
Hier ist, wie mein Server einrichtet die Fassung:
ctx = SSL.Context(SSL.SSLv23_METHOD)
ctx.use_privatekey_file ("mykey.pem")
ctx.use_certificate_file("mycert.pem")
sock = SSL.Connection(ctx, socket.socket(socket.AF_INET, socket.SOCK_STREAM))
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
addr = ('', int(8081))
sock.bind(addr)
sock.listen(5)
Hier ist, wie es akzeptiert Kunden:
sock.setblocking(0)
while True:
if len(select([sock], [], [], 0.25)[0]):
client_sock, client_addr = sock.accept()
client = ClientGen(client_sock)
Und hier ist, wie es sendet / aus den angeschlossenen Steckdosen erhält:
while True:
(r, w, e) = select.select([sock], [sock], [], 0.25)
if len(r):
bytes = sock.recv(1024)
if len(w):
n_bytes = sock.send(self.message)
Es ist verdichtet, aber Sie die allgemeine Idee. Das Problem ist, wenn die Sende- / Schleife beginnt zu erhalten, es stirbt sofort, bevor irgendetwas gesendet oder empfangen wurde (das ich sehe, trotzdem kann):
Traceback (most recent call last):
File "ClientGen.py", line 50, in networkLoop
n_bytes = sock.send(self.message
WantReadError
Die Beschreibung der Anleitung des ‚WantReadError‘ ist sehr vage, sagt, es von überall kommen kann. Was mache ich falsch?
Lösung
Manchmal, um die Anwendung Bytes einer SSL-Verbindung zu senden, müssen Sie in der Lage sein, mehr Bytes aus der Verbindung zuerst zu lesen. WantReadError
ist, wie dieser Fall angezeigt wird. Das einzige, was Sie falsch gemacht sind, ist, dass Sie nicht die WantReadError
Handhabung und dann warten, bis select
zeigt an, dass die Steckdose lesbar , bevor Sie send
versuchen Aufruf erneut.