в этом случае ответственны режимы порта. вы использовали буферизованный ввод-вывод с режимом ожидания (который включен по умолчанию).
в http клиент отвечает за закрытие порта, когда вы читаете все байты сервера.
поскольку вы в основном используете tcp напрямую, используя порт вставки, вы также несете ответственность за обнаружение конца запроса и закрытие порта, когда поступит достаточное количество байтов. это можно сделать только в / lines или / no-wait при выполнении низкоуровневого tcp-развлечения.
Что то читал и инфа? сделать для вас.
в то время как [данные: копировать порт] [добавить данные]
не завершается, пока не истечет время ожидания (которое в REBOL по умолчанию составляет 30 секунд).
Кроме того, ваш запрос кажется ошибочным ...
попробуй это:
port: open/lines tcp://cdimage.ubuntu.com:80
insert port {HEAD /daily/current/natty-alternate-i386.iso HTTP/1.0
Accept: */*
Connection: close
User-Agent: REBOL View 2.7.7.3.1
Host: cdimage.ubuntu.com
}
out: form copy port
block: parse out none ;rejoin [": ^/"]
probe select block "Content-Length:"
здесь кажется, что добавление / lines предотвратит ожидание. это, вероятно, связано с тем, как схема http обрабатывает линейный режим при открытии.
поищите режимы порта REBOL в документации и в сети, где они хорошо объяснены повсюду.
если бы вы использовали trace / net on, вы бы поняли, что все пакеты были получены, а интерпретатор просто все еще ждал. кстати, ваш код действительно вернул ошибку 400 в моих тестах.
person
moliad
schedule
09.12.2010