#!/usr/bin/perl -wT
# tns_server by Dan Baker

# return a number between 1 and 65535, incrementing each time,
# to any program connecting on TCP port 56283, then close the connection.

# For use as a unique 16-bit transaction number for communicating
# with Allen-Bradley Programmable Controllers.

##### Just run this server from /etc/inittab :
## X0:2345:respawn:/directoryname/tns_server > /dev/null 2>&1

##### or start it manually like:
## /directoryname/tns_server &

require 5.002;
use strict;
use IO::Socket;

my $port = 56283;
my $tns = ($$ & 0xFFFF);

sub tns {
 $tns++;
 $tns = 1 if $tns > 65535;
 return($tns);
}

my $sock = new IO::Socket::INET	(LocalPort => $port,
				 Proto => 'tcp',
				 Listen => 5,
				 Reuse => 1);
die "No socket" unless $sock;
while (my $newsock = $sock->accept()) {
 print $newsock tns(),"\n";;
}
close ($sock);

# End of program
