Salve,

ho uno script perl che fa una richiesta ad un server in locale e redirige la risposta ad un altro server in rete, il che crea un flusso continuo di dati (streaming):
codice:
# Connect to Local Server ($sock1)
# Connect to Remote Server ($sock2)

while ( sysread( $sock1, my $buff, 1024 ) )
{
	syswrite $sock2, $buff;
}

# Close $sock1;
# Close $sock2;
tuttavia il server remoto causa connessione potrebbe chiudere il Socket $sock2, questo porterebbe ad un fallimento della syswrite e conseguente chiusura del Socket $sock1. Potremmo dire che il Socket $sock2 è bloccante. Ora vorrei fare in modo che quando $sock2 cade $sock1 rimanga attivo ed avevo pensato di dividere il programma in due parti: La prima parte prende i dati dal server locale e li manda in UDP al secondo programma che li riceve in tramite un socket UDP in ascolto su una data porta e li manda al server remoto, in questo modo se il server remoto avesse problemi farebbe cascare il socket UDP che automaticamente verrebbe rilanciato...di seguito c'è il riassunto
codice:
***File2.pl

# ($usock, $uport) Crea un socket UDP localhost in ascolto su una porta a caso.
# Salva su /tmp/File2.port il numero della porta ($uport)
# Connect to Remote Server ($sock2)
# Aspetta il flusso dati:

while ( recv($usock, my $buff, 1024, 0) )
{
	syswrite $sock2, $buff;
	
	#
	# si esce da questo ciclo solo se il server remoto chiude la connessione!
	#
}

# close $sock2;
# unlink /tmp/File2.port

exit;

***File2.pl

# Connect to Local Server ($sock1)
# Crea un Socket UDP for Sending ($usock);

while ( sysread( $sock1, my $buff, 1024 ) )
{
	if -e /tmp/File2.port
	{
		my $port = system(cat /tmp/File2.port);
		
		&_udp_send($usock,"127.0.0.1", $port, $buff);
	}
	
	#
	# Do nothing;
	#
}

# Close

sub _udp_send {
	
	my $USOCK	 = $_[0];
	my $HOSTNAME = $_[1];
	my $PORTNO   = $_[2];
	my $MSG	     = $_[3];
	
	my $ipaddr   = inet_aton($HOSTNAME);
	my $portaddr = sockaddr_in($PORTNO, $ipaddr);

	send($USOCK, $MSG, 0, $portaddr) == length($MSG) or return 1;

	return 0;
}

exit;

***
Naturalmente tutto questo è teorico in quanto ancora devo definire lo script, ma la mia domanda era la seguente: sarebbe meglio fare due script separati che si scambiano lo streaming in UDP oppure faccio un file unico che fa fork()? e in entrambi i casi come faccio a fare ripartire File2 se questo si chiude?

grazie