Значит, нашёл в интернете код для сокет-сервера на Perl:

PHP код:
# This is an XMLSocket multiuser server, for use with Flash 5
# If you don't know what XMLSocket is, you shouldn't be using
# this program.
use IO::Socket;
use IO::Select;
# Set the input terminator to a zero byte string, pursuant to the
# protocol in the flash documentation.
$/ = "\0";
# Create a new socket, on port 7777
$lsn = new IO::Socket::INET(Listen => 1,
LocalPort => 7777,
Reuse => 1,
Proto => 'tcp' )
or die ("Couldn't start server: $!");
# Create an IO::Select handler
$sel = new IO::Select($lsn);
# Close filehandles
close(STDIN); close(STDOUT);
warn "Server ready. Waiting for connections . . . \n";
# Enter into while loop, listening to the handles that are available.
while( @read_ready = $sel->can_read ) {
foreach $fh (@read_ready) {
# Create a new socket
if($fh == $lsn) {
$new = $lsn->accept;
$sel->add($new);
push( @data, fileno($new) . " has joined.");
warn "Connection from " . $new->peerhost . ".\n";
}
# Handle connection
else {
$input = <$fh>;
chomp $input;
if ( $input eq '') {
push( @data, fileno($fh) . " has left.");
warn "Disconnection from " . $new->peerhost . ".\n";
$sel->remove($fh);
$fh->close;
}
else {
$output = fileno($fh) . ": $input";
push( @data, $output );
}
}
}
# Write to the clients that are available
foreach $fh ( @write_ready = $sel->can_write(0) ) {
foreach $line (@data) {
print $fh "$line \0";
}
}
undef @data;
}
warn "Server ended.\n";
При тестировании из Flash IDE сервер работает нормально, то есть в консоли выводятся такие сообщения:
Connection from 127.0.0.1 -- при подключении
Disconnection from 127.0.0.1 -- при отключении
Если же тестировать из браузеров то вывод будет таким:
Connection from 127.0.0.1 -- при подключении
Disconnection from 127.0.0.1
Connection from 127.0.0.1
Disconnection from 127.0.0.1 -- при отключении
То есть сокет подключается, сразу же отключается, а потом опять подключается... В этом собственно вопрос - почему так происходит и как это исправить?