This a rather convoluted problem so your patience is appreciated as I attempt to make sure I have made all the issues and circumstances clear.

My counter-strike server is transmitting a udp stream to another host (call this the splitter program) which subsquently splits the stream and forwards it to two different ports where to "receivers" catch the ultimate stream.

Simply put host 10.0.0.1 is transmitting a udp stream to 10.0.0.2 at port 10000. 10.0.0.2 then splits it (not the issue) and forwards it to 10.0.0.2:10001 and 10.0.0.2:10002.

So I wrote the following to for the "splitter", which receives the server's stream just fine, it is the forwarding problem that is the trouble. The splitter has no problems forwarding the data (I believe it forwards it to the right port, I think the problem is in the final destination script, see even further below for that code) and I include the relevant portion of the "splitter" here:

my $socket = IO::Socket::INET->new( LocalPort => $LISTEN_PORT, Type => SOCK_DGRAM, Proto => 'udp') || die "ERROR: can't open socket\n"; while ($socket->recv(my $in, 1024) ) { my $sock = IO::Socket::INET->new( Proto => 'udp', PeerAddr =>'127.0.0.1:50000'); print $sock $in;

I believe this to be true and correct. If it is not, please explain why.

The "reciever" performs the following and perhaps this is not a problem with the socket at all:

$s_socket = IO::Socket::INET->new( Proto=>"udp", LocalAddr=>"$s_ip", LocalPort=>"$s_port" ) or die ("\nCan't setup UDP socket on $ip$s_port: $!\n"); print "opened OK\n";

Then it checks to see what port AND ip the data stream is originating from...

$s_socket->recv($s_output, 1024); $s_peerhost = $s_socket->peerhost; $s_peerport = $s_socket->peerport; $s_addr = "$s_peerhost:$s_peerport";

and then later....

# Get the server info, if we know the server, otherwise ignore + the data if (!$g_servers{$s_addr}) { $g_servers{$s_addr} = &getServer($s_peerhost, $s_peerport); if (!$g_servers{$s_addr}) { &printEvent(997, "UNRECOGNISED SERVER: " . $s_output); next; } }

Now this may a be a bit confusing out of context, so I should mention that the script takes the the listen port and IP from the command line and determines if the server is a valid "source" from a mysql database. I would point out that without my "splitter" in the way, this code fragment above works fine when you specify the cs server's IP and port instead of the splitters IP and port.

The error output looks something like this....

Fri Mar 30 19:32:35 2001: 127.0.0.1:44018 - E997: UNRECOGNISED S +ERVER: ˙˙˙˙log L 03/30/2001 - 19:35:10: "eatitPUNK<269><346699><TERRO +RIST>" killed "livestock<370><23593><CT>" with "mp5navy"

So to be even more specific the counter-strike server sent the udp stream to 10.0.0.2:12345 and the splitter forwarded it to localhost via 127.0.0.1:12346. The final receipient does indeed see the stream, it just throws the above error though saying the packet orginates from an unspecified host. If I set the value for the port shown in the error in the database it reads the stream and does what it is supposed to do for a while, but then spontaneously or perhaps not the port is incremented, how I dunno.

So I am sorry for blathering on indefinitely. You time and patience are appreciated. Many thanks.

Myron DaChump chump@regulatorsonline.com


In reply to IO:Socket::NET problem & Counter-Strike by Myron DaChump

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.