Траблы с сокетами(

chisto_tolyan

Враг народа
Траблы с сокетами(

Вот кусок кода "скрипта-сервера":
socket_set_nonblock($socket);

do{
if (($msgsock = socket_accept($socket)) < 0) {
echo "socket_accept() failed: reason: " . socket_strerror ($msgsock) . "\n";
break;
}

$msg = "HTTP/1.1 200 OK \n\n\r";
$msg .= "Content-Type: text/html \n\n\r";
$msg .= "Hello world!";

socket_write($msgsock, $msg, strlen($msg));


flush();
sleep(5);
}
while(true);

по идее он должен отправлять Hello World! всем,кто обратитса браузером в 127.0.0.1:8080. Вместо этого сервер грязно ругаетса:

Warning: socket_accept() [function.socket-accept]: unable to accept incoming connection [0]: Операция на незаблокированном сокете не может быть завершена немедленно. in t:\home\midleage.ru\www\chat\server.php on line 31

Warning: socket_accept() [function.socket-accept]: unable to accept socket connection [0]: Операция успешно завершена. in t:\home\midleage.ru\www\chat\server.php on line 31

Warning: socket_write() expects parameter 1 to be resource, boolean given in t:\home\midleage.ru\www\chat\server.php on line 40

А в браузер нефига невыводит. Помоему проблемка в socket_write(),а в чем конкретно?. В чем кривость этого скрипта?)))
 

chisto_tolyan

Враг народа
<?
error_reporting (E_ALL);
set_time_limit (0);
ob_implicit_flush ();

$address = '127.0.0.1';
$port = '8080';

if($socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP)){
echo "Socket created ($socket)\n";
if($sock_bind = socket_bind($socket, $address, $port)){
echo "Socket bound at $address on port $port\n";
if($sock_listen = socket_listen($socket,5)){
echo "Start listening socket.\n";
}else{
echo "Error listening - ".socket_strerror(socket_last_error())."\n";
break;
}
}else{
echo "Error bounding - ".socket_strerror(socket_last_error())."\n";
break;
}
}else{
echo "Error creating socket - ".socket_strerror(socket_last_error())."\n";
break;
}

socket_set_nonblock($socket);

do{
if (($msgsock = socket_accept($socket)) < 0) {
echo "socket_accept() failed: reason: " . socket_strerror ($msgsock) . "\n";
break;
}

$msg = "HTTP/1.1 200 OK \n\n\r";
$msg .= "Content-Type: text/html \n\n\r";
$msg .= "<html><body bgcolor='gray'><h2>header2</h2>";

socket_write($msgsock, $msg, strlen($msg));


flush();
sleep(5);
}
while(true);

?>
 

neko

tеam neko
хорошо
убери:
socket_set_nonblock($socket);

и прежде чем в сокет писать, прочти из него запрос
для теста можешь прочесть 1000 байт, этого хватит

правда, ожидаемого результата у тебя не будет, потому заголовки которые шлешь офигенно кривы
но вывод в бразуер будет
 
Сверху