I am posting this problem and the solution to spread the news a little
about a nasty bug in XP.

PROBLEM
I have a Perl (activestate) 5.8.8 script that uses IO::Socket::INET;
and opens a broadcast UDP socket. The packets are received
successfully by another host running a similar script as long as I run
the sending script on windows2000. They fail to arrive when sent by
the identical script running on an XP host. A packet sniffer shows
that the packets are indeed broadcast but with an incorrect header
checksum and therefore the receiving host rejects them at socket
level.

SOLUTION (Work-around)
The packet header sumcheck corruption only occurs when the payload has
more than the  MTU bytes. Chopping the payload in to chunks that each
are shorter than the MTU and sending them  separately fixes it.

For information the socket is opened in non-blocking mode as follows:

use IO::Socket::INET;
sub openSock
{
 my $remoteIP="255.255.255.255";
 ${$_[0]}=new IO::Socket::INET->new(
           PeerPort=>$_[1],
           Proto=>'udp',
           PeerAddr=>$remoteIP,
           Broadcast => 1)

  my $temp = 1;
  ioctl (${$_[0]}, 0x8004667E, \$temp); # set non-blocking on windoze
}


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to