Размер окна TCP, идущий в 0 / Wget, прекращает загружать?

Решение

Это складывается, что, хотя PHP 5.2 представил объект DateTime, DateTime-> разность () метод не стал доступным до PHP 5.3.

В моем случае условный блок кода выполнился бы в зависимости от содержания некоторых результатов. Результаты, вызывающие эти 500, вызывали часть использования кода DateTime-> различный.

Я отправил исходный код, который вызывает 500 ошибок в PHP 5.2, сопровождаемом исправленным кодом, который воздействует как ожидалось на PHP 5.2.

Кто-либо может объяснить, почему PHP не зарегистрировал бы ошибку для этого, даже при том, что я использую E_ALL?

PHP 5.2 Несовместимый код:

$effective = new DateTime($eff, new DateTimeZone('America/New_York'));
$diff = $effective->diff(new DateTime(date('Y-m-d'), new DateTimeZone('America/New_York')));
if ($diff->format('%R') === '-') { ...

PHP 5.2 Совместимый код:

$effective = new DateTime($eff, new DateTimeZone('America/New_York'));
if ($effective > new DateTime(null, new DateTimeZone('America/New_York'))) { ...
2
задан 18 April 2012 в 00:54
2 ответа

Нулевой размер окна означает, что ОС получила все данные, которые она могла в своем приемном буфере для это соединение и ожидает, пока приложение его прочитает (). Другими словами, если вы не читаете данные, которые отправляет вам сервер, так же быстро, как он их отправляет, в какой-то момент он заблокируется вот так. Как вы используете wget, можете ли вы вставить точный сценарий / команду? То же самое и с вашей java-программой, уверены ли вы, что она читает все данные с сервера и никогда не выполняет резервное копирование, или пропускает событие / уведомление о том, что данные готовы, или имеет проблему, когда она не успевает за своим чтением ( ) s?

Также проверьте netstat -anp и просмотрите столбец Recv-Q для этого соединения, если он не 0, значит данные помещены в буфер, ждем, пока ваше приложение его прочитает. Изменить: argh, Windows, эта ссылка может помочь.

2
ответ дан 3 December 2019 в 10:58

Извините за задержку с обновлением. Короче говоря, причиной всего этого был сломанный NAT в облаке Microsoft Azure. Он игнорирует RFC 5382. Их таймаут на TCP-соединении - 60 лет. Когда этот таймаут нарушается, соединение не закрывается активно (RST или около того, как предложено в RFC), или просто игнорируется. Вместо этого происходит очень странная трансляция, в результате которой пакеты поступают с мусорными IP-адресами источника/назначения на правильной ВМ. ВМ выбрасывает их, но это делает запирание их в проволочную акулу довольно хитрым. Это будет выглядеть как совершенно другое соединение.

Выходом из строя было сердцебиение на уровне приложений 60-х годов.

.
1
ответ дан 3 December 2019 в 10:58

Теги

Похожие вопросы