"Hängen" des Sockets verhindern

Hallo Leute,

in einem Skript habe ich einen „eigenen“ ClientSocket. Alles gut soweit - bis auf den Fall das die Daten nicht wie erwartet zurückkommen…

[PHP //Now receive reply from server
if(socket_recv ($sock, $buf, $ResponseLen, MSG_WAITALL ) === FALSE) {
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
IPS_LogMessage("GPIO Socket: ", "Fehler beim beim Empfangen „.[$errorcode].“ ".$errormsg);
return;
}]



Dann "hängt" der Thread und wenn das ein paar mal passiert ist, dann hängt IPS...:mad:

Man könnte jetzt nach meiner Recherche an verschiedenen Stellschrauben drehen:
- MSG_WAITALL durch MSG_DONTWAIT ersetzen
- 
```php
socket_set_option($sock,SOL_SOCKET,SO_RCVTIMEO,array("sec"=>1,"usec"=>0));

setzen

  • bool stream_set_timeout ( resource $stream , int $seconds [, int $microseconds = 0 ] ) benutzen

Aber welche wäre der „richtige“ Ansatz?:confused:

Joachim

Den ClientSocket von IPS zu nutzen. Was ist an dem doof?

paresy

Hallo Paresy,

gar nichts!:smiley:

Benutzte daher beide:

  • Den IPS Client Sockets für Notifcations
  • Den „eigenen“ für Kommandos

Siehe hier…

Wird auch vom Entwickler von PIGPIO so empfohlen, da man die ankommenden sonst manchmal schlecht auseinanderhalten kann…

Joachim

Schau dann mal hier: php - Set a timeout on socket_read - Stack Overflow :slight_smile:

paresy

…habe ich jetzt mal so eingebaut…:wink:

Danke!