ソケットに接続するPHPのコードがあります。書き込み中に断続的にパイプが壊れてしまいました。パイプに再度書き込むと、問題は解決するようです。私はそれから回復するために何が必要か(最も安全な方法)疑問に思っています。また、socket_writeに渡された完全な文字列を書き込まずにsocket_writeが返されるのではないかと思います。これが私が現在持っているものです。
function getSocket() {
$socket = socket_create( AF_UNIX, SOCK_STREAM, 0 );
if ( $socket === FALSE ) {
throw new Exception(
"socket_create failed: reason: " . socket_strerror( socket_last_error() ));
}
}
$result = socket_connect($socket, $address);
if ($result === false) {
throw new Exception("socket_connect() failed.\nReason: ($result) " .
socket_strerror(socket_last_error($socket)));
}
return $socket;
}
function writeSocket($stmt) {
$tries = 0;
$socket = getSocket();
do {
// Is is possible that socket_write may not write the full $stmt?
// Do I need to keep rewriting until it's finished?
$writeResult = socket_write( $socket, $stmt, strlen( $stmt ) );
if ($writeResult === FALSE) {
// Got a broken pipe, What's the best way to re-establish and
// try to write again, do I need to call socket_shutdown?
socket_close($socket);
$socket = getSocket();
}
$tries++;
} while ( $tries < MAX_SOCKET_TRIES && $writeResult === FALSE);
}