Domanda

Così, ho il seguente codice:

  def LSCPHandler.send_message(message, hostname, port)
s = TCPSocket.open(hostname, port)
s.print message
ret = s.recv(1024)
s.close 
LSCPHandler.parse_error(ret)
return ret  

end

Il che funziona bene, normalmente. Il server Sto parlando con restituisce la risposta abbastanza rapidamente, in genere, e tutto va bene.

Poi, oggi, qualcosa è andato storto con il server. Non è il mio problema, ma, ciò ha determinato in tutta la mia impiccagione applicazione, in attesa di recv per timeout. Questo non è esattamente ottimale.

C'è un modo per time out recv se io non' sentire qualcosa di nuovo subito? Ho provato a guardare la documentazione di rubino, ma in realtà mi confonde (cioè TCPSocket solo implementa tre metodi, nessuno di loro si aprono o recv, ed è di classe genitrice di Socket non implemente questi metodi sia. Classe padre di E Socket sembra essere oggetto ? sto accuratamente confuso)

È stato utile?

Soluzione

È possibile impostare la ricezione di timeout opzioni di socket sulla presa a qualcos'altro da quello predefinito. La parte difficile è quello di scegliere un numero adeguato che funziona ancora in tutti i casi d'uso, vale a dire non volete la chiamata recv al timeout troppo presto.

s.setsockopt(Socket::SOL_SOCKET, Socket::SO_RCVTIMEO, <timeout>)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top