Domanda

Ho un server socket che sto cercando di passare al SSL su Python 2.5, ma ho incontrato un intoppo con pyOpenSSL. Non riesco a trovare qualsiasi buoni tutorial sull'uso di esso, così sto operando in gran parte su congetture.

Ecco come il mio server imposta il socket:

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)

Ecco come accetta clienti:

sock.setblocking(0)
while True:
  if len(select([sock], [], [], 0.25)[0]):
    client_sock, client_addr = sock.accept()
    client = ClientGen(client_sock)

E qui è come si invia / riceve dalle prese collegate:

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)

E 'compattato, ma si ottiene l'idea generale. Il problema è che, una volta che l'invio / ricezione inizia ciclo, muore subito, prima di tutto è stato inviato o ricevuto (che posso vedere in ogni caso):

Traceback (most recent call last):
  File "ClientGen.py", line 50, in networkLoop
    n_bytes = sock.send(self.message
WantReadError

La descrizione del manuale del 'WantReadError' è molto vago, dicendo che può venire da un po 'ovunque. Che cosa sto facendo di sbagliato?

È stato utile?

Soluzione

A volte, al fine di inviare byte applicazione di una connessione SSL, è necessario essere in grado di leggere più byte dalla prima connessione. WantReadError è come questo caso è indicato. L'unica cosa che si sta facendo male è che non sei la gestione della WantReadError e quindi in attesa fino a quando select indica che la presa sia leggibile prima di provare a chiamare di nuovo send.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top