Ho un'architettura server client scritta in python. La maggior parte delle volte funziona, ma a volte, dopo aver arrestato il server e riavviato subito dopo, viene visualizzato il seguente errore:Eccezione argomento non valido in socket.accept() se si riavvia immediatamente dopo l'esecuzione di una sessione precedente
Accettato non riuscito a causa di: 22 Messaggio Argomento non valido, errore: [Errno 22] non valido argomento
Tuttavia, se attendo qualche minuto e riavvio lo stesso script senza modifiche, funziona correttamente.
Questo è il ciclo che uso sul server di accettare connessioni in entrata da parte dei clienti:
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('',port))
s.listen(1)
except:
#logError()
while True:
try:
conn, address = s.accept() #THIS ACCEPT FAILS SOMETIMES
multiprocessing.Process(target=HandleConnection, args=(conn, address, messageQueue, taskQueue, IOLock, numberOfConnections, numberOfConnectionsLock,resultsDirectory)).start()
except socket.error, msg:
#logError() -> this except catches the error
Condivide la porta si blocchi per qualche tempo dopo ho eseguito il server? Se è così, c'è modo di interrogare se la porta è bloccata e aspettare finché non viene sbloccata se voglio riavviare il server immediatamente dopo che è appena uscito?
Non stavo bloccando l'eccezione, stavo registrando, ma credo che avrei dovuto tornare dopo. Invece sono entrato nel ciclo while, che ha riempito i miei log di rifiuti e ho pensato che ci fosse un problema con accept e non con bind. Frustrante. – Alexander
@Alexander Oh capisco. Scusate se il mio commento suonava snarky, è del tutto comprensibile perdere un avvertimento con così tanti altri. – cnicutar
Sì, immagino di essere stato svalutato e ho pensato "omg, non sto cercando di fare una domanda stupida, sono stato a questo per ore e ore". Grazie mille per il vostro aiuto. – Alexander