<?php
$address = '127.0.0.1' ;
$port = 1337 ;
if ( ( $sock = socket_create ( AF_INET
, SOCK_STREAM
, SOL_TCP
) ) === false ) { }
}
}
do {
echo "Не удалось выполнить socket_accept(): причина: " . socket_last_error ( $sock ) . "\n " ; break ;
}
$request = "" ;
//без этой функции мы повиснем на чтении из сокета навечно, но почему-то если объявить её до этого цикла, то даные из сокета не прочтутся
$request .= $read ;
}
if ( $read === false ) {
}
$response = "HTTP/1.1 200 Ok\r \n " ;
$response .= "Content-Type: text/html; charset=UTF-8\r \n \r \n " ;
$response .= "<!DOCTYPE html><html><head></head><body>$request </body></html>" ;
socketWrite( $msgsock , $response ) ;
} while ( true ) ;
function socketWrite( $msgsock , $buffer ) {
if ( $bytesSent === false ) {
} elseif ( $bytesSent < $length ) {
$newBuffer = substr ( $buffer , $bytesSent ) ; socketWrite( $msgsock , $newBuffer ) ;
} else {
echo "all bytes have been sent \n " ;
//здесь был sleep(10) до того, как я стал читать данные из сокета. Без socket_read или sleep сокет как будто закрывается до того, как клиент успевает принять респонс, что приводит к ошибке в браузере
}
}
PD9waHAKZXJyb3JfcmVwb3J0aW5nKEVfQUxMKTsKIAokYWRkcmVzcyA9ICcxMjcuMC4wLjEnOwokcG9ydCA9IDEzMzc7CiAKaWYgKCgkc29jayA9IHNvY2tldF9jcmVhdGUoQUZfSU5FVCwgU09DS19TVFJFQU0sIFNPTF9UQ1ApKSA9PT0gZmFsc2UpIHsKCWVjaG8gItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtC30LTQsNGC0Ywg0YHQvtC60LXRgiwg0L/RgNC40YfQuNC90LA6ICIgLiBzb2NrZXRfc3RyZXJyb3Ioc29ja2V0X2xhc3RfZXJyb3IoKSkgLiAiXG4iOwoJZGllOwp9CiAKaWYgKHNvY2tldF9iaW5kKCRzb2NrLCAkYWRkcmVzcywgJHBvcnQpID09PSBmYWxzZSkgewoJZWNobyAi0J3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0LjQstGP0LfQsNGC0Ywg0YHQvtC60LXRgiDQuiDQsNC00YDRgNC10YHRgywg0L/RgNC40YfQuNC90LA6ICIgLiBzb2NrZXRfc3RyZXJyb3Ioc29ja2V0X2xhc3RfZXJyb3IoKSkgLiAiXG4iOwoJZGllOwp9CiAKaWYgKHNvY2tldF9saXN0ZW4oJHNvY2ssIDUpID09PSBmYWxzZSkgewoJZWNobyAi0J3QtSDRg9C00LDQu9C+0YHRjCDQstGL0L/QvtC70L3QuNGC0Ywgc29ja2V0X2xpc3RlbigpOiDQv9GA0LjRh9C40L3QsDogIiAuIHNvY2tldF9zdHJlcnJvcihzb2NrZXRfbGFzdF9lcnJvcigkc29jaykpIC4gIlxuIjsKCWRpZTsKfQogCmRvIHsKCWlmICgoJG1zZ3NvY2sgPSBzb2NrZXRfYWNjZXB0KCRzb2NrKSkgPT09IGZhbHNlKSB7CgkJZWNobyAi0J3QtSDRg9C00LDQu9C+0YHRjCDQstGL0L/QvtC70L3QuNGC0Ywgc29ja2V0X2FjY2VwdCgpOiDQv9GA0LjRh9C40L3QsDogIiAuIHNvY2tldF9sYXN0X2Vycm9yKCRzb2NrKSAuICJcbiI7CiAgICAgICAgYnJlYWs7Cgl9CgoJJHJlcXVlc3QgPSAiIjsKCgl3aGlsZSAoJHJlYWQgPSBzb2NrZXRfcmVhZCgkbXNnc29jaywgMikpIHsKCQkvL9Cx0LXQtyDRjdGC0L7QuSDRhNGD0L3QutGG0LjQuCDQvNGLINC/0L7QstC40YHQvdC10Lwg0L3QsCDRh9GC0LXQvdC40Lgg0LjQtyDRgdC+0LrQtdGC0LAg0L3QsNCy0LXRh9C90L4sINC90L4g0L/QvtGH0LXQvNGDLdGC0L4g0LXRgdC70Lgg0L7QsdGK0Y/QstC40YLRjCDQtdGRINC00L4g0Y3RgtC+0LPQviDRhtC40LrQu9CwLCDRgtC+INC00LDQvdGL0LUg0LjQtyDRgdC+0LrQtdGC0LAg0L3QtSDQv9GA0L7Rh9GC0YPRgtGB0Y8KCQlzb2NrZXRfc2V0X25vbmJsb2NrKCRtc2dzb2NrKTsKCQkkcmVxdWVzdCAuPSAkcmVhZDsKCX0KCglpZiAoJHJlYWQgPT09IGZhbHNlKSB7CgkJZWNobyAi0L7RiNC40LHQutCwINGH0YLQtdC90LjRjyDQuNC3INGB0L7QutC10YLQsCwg0L/RgNC40YfQuNC90LA6ICIgLiBzb2NrZXRfbGFzdF9lcnJvcigkbXNnc29jaykgLiAiXG4iOwoJfQoKCSRyZXNwb25zZSA9ICJIVFRQLzEuMSAyMDAgT2tcclxuIjsKCSRyZXNwb25zZSAuPSAiQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLThcclxuXHJcbiI7CgkkcmVzcG9uc2UgLj0gIjwhRE9DVFlQRSBodG1sPjxodG1sPjxoZWFkPjwvaGVhZD48Ym9keT4kcmVxdWVzdDwvYm9keT48L2h0bWw+IjsKCglzb2NrZXRXcml0ZSgkbXNnc29jaywgJHJlc3BvbnNlKTsKfSB3aGlsZSAodHJ1ZSk7CiAKc29ja2V0X2Nsb3NlKCRzb2NrKTsKCmZ1bmN0aW9uIHNvY2tldFdyaXRlKCRtc2dzb2NrLCAkYnVmZmVyKSB7CgkkbGVuZ3RoID0gc3RybGVuKCRidWZmZXIpOwoJJGJ5dGVzU2VudCA9IHNvY2tldF93cml0ZSgkbXNnc29jaywgJGJ1ZmZlciwgJGxlbmd0aCk7CgoJaWYgKCRieXRlc1NlbnQgPT09IGZhbHNlKSB7CgkJZWNobyAi0J3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0L/QuNGB0LDRgtGMINC00LDQvdC90YvQtSDQsiDRgdC+0LrQtdGCLCDQv9GA0LjRh9C40L3QsDoiIC4gc29ja2V0X3N0cmVycm9yKHNvY2tldF9sYXN0X2Vycm9yKCkpOwoJCXNvY2tldF9jbG9zZSgkbXNnc29jayk7Cgl9IGVsc2VpZiAoJGJ5dGVzU2VudCA8ICRsZW5ndGgpIHsKCQkkbmV3QnVmZmVyID0gc3Vic3RyKCRidWZmZXIsICRieXRlc1NlbnQpOwoJCXNvY2tldFdyaXRlKCRtc2dzb2NrLCAkbmV3QnVmZmVyKTsKCX0gZWxzZSB7CgkJZWNobyAiYWxsIGJ5dGVzIGhhdmUgYmVlbiBzZW50IFxuIjsKCQkvL9C30LTQtdGB0Ywg0LHRi9C7IHNsZWVwKDEwKSDQtNC+INGC0L7Qs9C+LCDQutCw0Log0Y8g0YHRgtCw0Lsg0YfQuNGC0LDRgtGMINC00LDQvdC90YvQtSDQuNC3INGB0L7QutC10YLQsC4g0JHQtdC3IHNvY2tldF9yZWFkINC40LvQuCBzbGVlcCDRgdC+0LrQtdGCINC60LDQuiDQsdGD0LTRgtC+INC30LDQutGA0YvQstCw0LXRgtGB0Y8g0LTQviDRgtC+0LPQviwg0LrQsNC6INC60LvQuNC10L3RgiDRg9GB0L/QtdCy0LDQtdGCINC/0YDQuNC90Y/RgtGMINGA0LXRgdC/0L7QvdGBLCDRh9GC0L4g0L/RgNC40LLQvtC00LjRgiDQuiDQvtGI0LjQsdC60LUg0LIg0LHRgNCw0YPQt9C10YDQtQoJCXNvY2tldF9jbG9zZSgkbXNnc29jayk7Cgl9Cn0=