いくつかのソケット関数を使用して、特定の IP とポートを使用してクライアントと通信するために使用されるソケット ハンドラ クラスがあります。関数を初めて使用するときはwritetosocket()
、完全に機能しています。
しかし、クライアントを再起動するとき(IPとポートを使用)。そしてそれを使用しようとすると、エラーコード 32 で壊れたパイプエラーがwritetosocket()
返されます。ただし、関数の実行が成功した後。ソケットにデータを書き込んでいるときに、しばらくするとこのエラーが発生することを意味します。私はいくつかの解決策を読み、クライアントが応答していないことがわかったときにソケット接続を適切に終了するために、使用している最も一般的な解決策を試しました。その後、再び startconnection を呼び出しています。これにより、新しいソケットが提供されます。しかし、それでも壊れたパイプエラーが発生します。socket_write
socket_shutdown
socket_close
function startconnection(){
/* Create a socket in the AF_INET family, using SOCK_STREAM for TCP connection */
$this->socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($this->socket === false) {
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
echo "$errorcode : $errormsg";
return false;
}
else {
echo "Socket successfully created.";
}
/* Accept incoming connections */
$this->result = socket_connect($this->socket, $this->ipaddress, $this->port);
if($this->result === false){
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
echo "$errorcode : $errormsg";
return false;
}
else {
echo "successfully connected to $this->ipaddress, $this->port";
}
return true;
}
function writetosocket($input){
$sent = socket_write($this->socket, $input, strlen($input));
if($sent === false) {
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
echo "$errorcode : $errormsg";
return false;
}
else {
echo "Message Sent : $input";
}
return true;
}
関数が壊れたパイプエラーを処理できるように、この問題を理解して解決するのを手伝ってください。