есть у меня кусок кода с использованием неблокирующего сокета схематически) PHP: <? $ip = '212.45.19.24'; $port = '80'; $query = 'POST example.com/hehe....... HTTP 1/1.........'; $sock = socket_create(AF_INET, SOCK_STREAM, 0); socket_set_nonblock($sock); @socket_connect($socket1,"$ip", $ip); while( !(socket_select($r,$w,$e=null, 0)>0)){ ## {.....} тут проверяю законектился ли ussleep(100); } ## посылка данных if ($l=socket_write($sock, $query)===len($query)){ // {успушный выход} } ?> получается что в строке №15 {успушный выход} данные отправились, но на самом деле они не дошли до места назначения куда был передан post запрос, в чем может быть дело. Думал прокси, попробовал выполнить тоже самое через браузер всё получается, прокси рабочий. В чем может быть причина ? [/code]
А как вы проверяете, дошли ли данные до сервера? Я не вижу попыток чтения ответа, да и сам POST пакет весьма символически обозначен. Потом, кто же так проверяет установку соединения? Зачем в примере 8 строка? Откуда берутся $r,$w в 9-й строке? вобщем учитесь писать рабочие демонстрационные скрипты.
Я дико извиняюсь за некоректный пример, написан он на обум, из исходника тяжело выдрать рабочий код да и время жмет сильно , человеку "понимающему" общий принцип понятен, здесь проблема в том, что я не знаю как получить результат от сервера о принятии данных, т.е. для себя я результатом записи на сервер считал условие PHP: <?if ($l=socket_write($sock, $query)===len($query)){ ## думаю что все записалось }?> т.е. что длинна записанных данных в сокет, равна длинне самих переданных данных, но как я убедился на примере работы с прокси этого недостаточно. Подскажите пожалуйста как правильнее получить информацию о принятии данных от сервера ? Что самое интересное без использования прокси всё отлично работает.
enigman, количество успешно записанных байт вовсе может не означать успешность передачи запроса. HTTP высокоуровневый протокол обмена данными, в данном случае работающий поверх TCP протокола. Чтобы убедиться, что запрос обработан, надо дождаться ответа HTTP протокола. Предположительно это будет что то типа HTTP/1.0(1) 200 OK. Для получения ответа надо дождаться появления в буфере чтения данных (с помощью socket_select), считать их с помощью socket_read и распарсить полученные данные с целью извлечения полезной информации. Удачи! -)