PHP Warning: socket_read(): unable to read from socket [104]: Connection reset by peer
Benutze ich socket_create()
zu erstellen, socket,dann habe ich das binden eines IP
- Adresse, um es durch socket_bind()
, seine Werke gut;
Aber nach einer Weile(mehr als 30 Minuten) in Zeile socket_read($sock, 2048)
dieser Fehler geworfen :
"PHP Warning: socket_read(): unable to read from socket [104]: Connection reset by peer in test.php on line 198"
.
Dies ist mein vereinfachter code:
$this->sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
//check if tcp socket ceated or not
if ($this->sock === false) {
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Couldn't create socket: [$errorcode] $errormsg");
}
//Bind the source address
socket_bind($this->sock, $this->ip);
//Connect to destination address
socket_connect($this->sock, $this->mxHost, $this->port);
$buf = socket_read($this->sock, 2048);
Dieses Stück code SMTP(port 25) - Verbindung zu einem MX-Host auf der anderen Seite.
Vielleicht ist es die Schuld auf der anderen Seite der Verbindung, Aber wie kann ich erkennen, dass die andere Seite nicht bereit ist für die Verbindung jetzt. In dem anderen Wort, wie finde ich den "Connection reset by peer" aufgetreten?
InformationsquelleAutor Arash Mousavi | 2014-10-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie überprüfen, ob
socket_connect()
erfolgreich war vor der Lektüre.so könnte man umschreiben, dass Ihr code wie folgt:
-- AKTUALISIERT --
Ich habe aktualisiert den code so, dass er prüft, ob die socket_read zurückgegebenen Daten.
Ich legte socket_connect in der
if
Aussage, aber socket_connect gibt true zurück, aber socket_read wirft diesen Fehler. 🙁Würde das nicht Ihren code werfen connection reset Fehler, auch wenn der server voll da? Sie prüfen nur auf eine leere Zeichenfolge ist, kann sein timeout, connection reset oder einfach ein server, der nicht Daten senden.
InformationsquelleAutor dnshio
Hmm... Dein peer die Verbindung zurückgesetzt. Vielleicht ist es die Schuld auf der anderen Seite der Verbindung ? Ein timeout-Mechanismus kann ausgeführt werden, auf der anderen Seite.
Könnten Sie testen Sie die Buchse, bevor Sie mit dem schreiben, um es mit den
socket_last_error
- Funktion und erstellen Sie die Verbindung über eine Trennung.socket_last_error() nicht zeigt keine Fehler nach socket_create().
Aber keine Fehler, nur vor dem ausführen der Ausdruck die Ursache der Warnung zu einer bestimmten Zeit ? Testen Sie die Steckdose, bevor ein Problem
socket_read
. Im Fall von einem Fehler berichtet, durch 'socket_last_error` erstellen Sie Ihre SMTP-Sitzung. Indem Sie die ganze socket_create Teil wieder.InformationsquelleAutor itsafire