В настоящее время я использую неблокирующий сокет для подключения к сервису в php. У меня проблемы с сообщением, когда соединение обрывается из-за сбоя на стороне сервера ... Все, что я получаю, это ошибки 10035,нефатальная ошибка, которую я игнорирую, но я никогда не получаю соответствующую ошибку и поэтому не могу сказать, когда соединение оборвалось из-за закрытия сервера ... какие-либо предложения по этому вопросу?
Мое прослушиваниерутина выглядит так
$this->shouldListen = true;
$fullResponse = '';
while ($this->shouldListen) {
//read some data
$tempResponse=socket_read($this->sock,1000);
if ($this->shouldBeRunning() == false) {
break;
}
if ($tempResponse == FALSE) {
//ignore ignorable error
$error = socket_last_error($this->sock);
if ($error!=11 && $error!=115 && $error!=10035) {
$this->writeLogFile("got an error ".$error);
break;
}
} else {
//do something with the response
}
}
и создаёт сокетное соединение вот так
function connect() {
/* Turn on implicit output flushing so we see what we're getting
* as it comes in. */
ob_implicit_flush();
if (($this->sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {
return false;
// echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
} else {
//echo 'success1<br />';
}
if (socket_bind($this->sock, '0.0.0.0') === false) {
return false;
//echo "socket_bind() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
} else {
//echo 'success2<br />';
}
if (socket_connect($this->sock, $this->ip, $this->port) === false) {
//echo "socket_connect() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
return false;
} else {
//echo 'success3<br />';
}
socket_set_nonblock($this->sock);
return true;
}
Спасибо
Даниэль