Olegaarh
Новичок
Сокеты, Address already in use
Привет всем.
Есть скрипт который ловит данные, переданные по протоколу UDP и выводит их на экран.
Когда во время работы скрипта в браузере нажимаю F5 выдается сообщение об ошибке - unable to bind address [48]: Address already in use. Хотя вроде и пользуюсь SO_REUSEADDR.
Если через некоторое время опять нажать F5 все снова работает.
Планирую использовать скрипт в качестве демона. И поэтому возникает вопрос, если кто-то наберет в строке браузера адрес по которому данный скрипт находится - то скрипт зависнет. Как сделать так чтобы скрипт не зависал?
Или надо поместить скрипт туда где нет доступа к нему через браузер? Но даст ли это гарантии что скрипт не зависнет? И можно ли сделать так чтобы при зависании скрипта он запускался заново?
Код скрипта
Привет всем.
Есть скрипт который ловит данные, переданные по протоколу UDP и выводит их на экран.
Когда во время работы скрипта в браузере нажимаю F5 выдается сообщение об ошибке - unable to bind address [48]: Address already in use. Хотя вроде и пользуюсь SO_REUSEADDR.
Если через некоторое время опять нажать F5 все снова работает.
Планирую использовать скрипт в качестве демона. И поэтому возникает вопрос, если кто-то наберет в строке браузера адрес по которому данный скрипт находится - то скрипт зависнет. Как сделать так чтобы скрипт не зависал?
Или надо поместить скрипт туда где нет доступа к нему через браузер? Но даст ли это гарантии что скрипт не зависнет? И можно ли сделать так чтобы при зависании скрипта он запускался заново?
Код скрипта
PHP:
<?php
set_time_limit(0);
ob_implicit_flush();
while (true)
{
$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1) or die("Error");
socket_bind($socket, "127.0.0.1",1721) or die("Error");
socket_recvfrom($socket, $buf, 65535, 0, $clientIP, $clientPort);
socket_set_nonblock($socket) or die("Error");
echo $buf."<br/>";
socket_shutdown($socket,2);
socket_close($socket);
}
?>