Php-palvelinkokeilussa on pieni ongelma. Palvelimelle laitettu portti on aina päällä ja sivu ei toimine sen takia.
Php-ohlelma on tällainen
<?php
ini_set('error_reporting', E_ALL ^ E_NOTICE);
ini_set('display_errors', 1);
// Set time limit to indefinite execution
set_time_limit(70);
// Set the ip and port we will listen on
$address = '127.0.0.1';
$port = 6901;
ob_implicit_flush();
// Create a TCP Stream socket
$sock = socket_create(AF_INET, SOCK_STREAM, 0);
// Bind the socket to an address/port
socket_bind($sock, $address, $port) or die('Could not bind to address');
// Start listening for connections
socket_listen($sock);
// Non block socket type
socket_set_nonblock($sock);
// Clients
$clients = [];
// Loop continuously
while (true) {
// Accept new connections
if ($newsock = socket_accept($sock)) {
if (is_resource($newsock)) {
// Write something back to the user
socket_write($newsock, ">" . $seconds . ' ', 1).chr(0);
// Non bloco for the new connection
socket_set_nonblock($newsock);
// Do something on the server side
echo "New client connected\n";
// Append the new connection to the clients array
$clients[] = $newsock;
}
}
// Polling for new messages
if (count($clients)) {
foreach ($clients AS $k => $v) {
// Check for new messages
$string = '';
if ($char = socket_read($v, 1024)) {
$string .= $char;
}
// New string for a connection
if ($string) {
echo "$k:$string\n";
} else {
if ($seconds > 60) {
// Ping every 5 seconds for live connections
if (false === socket_write($v, 'PING')) {
// Close non-responsive connection
socket_close($clients[$k]);
// Remove from active connections array
unset($clients[$k]);
}
// Reset counter
$seconds = 0;
}
}
}
}
sleep(1);
$seconds++;
}
// Close the master sockets
socket_close($sock);
<?php
ja selaimessa näkyvä sivu eli virheilmoitus on tällainen
Warning: socket_bind(): unable to bind address [98]: Address already in use in /home/mappi/nettisivu/koepalvelin_01.php on line 22
Could not bind to address
Pääteselvittely antaa tällaista
$ sudo netstat -tulpn | grep :6901
tcp 0 0 127.0.0.1:6901 0.0.0.0:* LISTEN 1118/apache2
Olisiko portti siis varattu apachelle, ja porttinumero pitäisi vain vaihtaa. Miten koepalvelimen saa pois päiviltä eli php-ohjelman sammutettua täysin varmasti, ei ole ihan varmaa, toimiiko php:n set_time_limit(70).
MUok.
Näin ainakin portti näyttää vapautuvan
sudo systemctl restart apache2