[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Trouble with UDP/IP communications
- To: IGLU <linux-il(at-nospam)linux.org.il>
- Subject: Trouble with UDP/IP communications
- From: Omer Zak <omer(at-nospam)ozicom.co.il>
- Date: Tue, 26 Jun 2001 01:09:26 +0300 (IDT)
- Delivered-To: linux.org.il-linux-il@linux.org.il
- Sender: linux-il-bounce(at-nospam)cs.huji.ac.il
I am trying to develop applications based upon UDP, but ran into a problem
doing UDP communications in the LAN on which I test my stuff, and I don't
have the vaguest idea where to start checking.
The perl Camel book has an example of communicating with UDP sockets. A
slightly modified script is attached to this E-mail message.
When I try the script in the LAN as follows:
$ ./udpecho.pl 192.168.0.1 192.168.0.2 127.0.0.1 localhost 192.168.0.26 \
> 192.168.0.31
I get the following output:
error sending to 192.168.0.1: Invalid argument
error sending to 192.168.0.2: Invalid argument
error sending to 192.168.0.31: Invalid argument
Reply from host geosedit: Host 3: 127.0.0.1
Reply from host geosedit: Host 4: localhost
Reply from host geosedit: Host 5: 192.168.0.26
Analysis:
192.168.0.1 - exists in the LAN
192.168.0.2 - does not exist
127.0.0.1 - my own host
localhost - my own host (of course!)
192.168.0.26 - my own host
192.168.0.31 - exists in the LAN
I don't understand why the UDP communication with 192.168.0.1 or
192.168.0.31 does not work as it should be. The UDP port 7 is enabled
(when it is blocked, I get a "Connection refused" error, rather than
"Invalid argument").
With TCP/IP (telnet, HTTP, etc.) I had absolutely no problems.
Environmental Details:
----------------------
1. The LAN is 100-Base TX Ethernet, with hub model DH-1600
10/100Mbps Dual Speed Hub, manufactured by Planet Technology Corp.
2. The perl version being used is 5.005_03 built for i386-linux.
3. The Linux version being used by localhost is:
Red Hat Linux release 6.2 (Zoot)
Kernel 2.2.14-5.0 on an i586
4. The relevant line from /etc/inetd.conf is:
echo dgram udp wait root internal
Any advice where should I look for the reasons for my UDP/IP problems?
Thanks,
--- Omer
-- Attached file included as plaintext by Listar --
-- File: udpecho.pl
#!/usr/bin/perl -w
# udpecho.pl script - speak to an UDP echo port.
#
# Was written by Omer Zak in order to test communication by UDP/IP.
use strict;
use Socket;
use Sys::Hostname;
my ($count, $hisiaddr, $hispaddr,
$host, $iaddr, $msg, $paddr, $port, $proto,
$rin, $rout, $response);
$iaddr = gethostbyname(hostname());
$proto = getprotobyname('udp');
$port = getservbyname('echo', 'udp');
$paddr = sockaddr_in(0, $iaddr); # 0 means let kernel pick
socket(SOCKET, PF_INET, SOCK_DGRAM, $proto) || die "socket: $!";
bind(SOCKET, $paddr) || die "bind: $!";
$| = 1;
$count = 0;
for $host (@ARGV) {
$count++;
$hisiaddr = inet_aton($host) || die "unknown host";
$msg = "Host $count: $host";
$hispaddr = sockaddr_in($port, $hisiaddr);
defined(send(SOCKET, $msg, 0, $hispaddr)) || print "error sending to $host: $!\n";
}
$rin = '';
vec($rin, fileno(SOCKET), 1) = 1;
# timeout after 10.0 seconds
while ($count && select($rout = $rin, undef, undef, 10.0)) {
($hispaddr = recv(SOCKET, $response, 65536, 0)) || print "reception error: $!\n";
($port, $hisiaddr) = sockaddr_in($hispaddr);
$host = gethostbyaddr($hisiaddr, AF_INET);
print "Reply from host $host: $response\n";
$count--;
}
# End of udpecho.pl
=================================================================
To unsubscribe, send mail to linux-il-request@linux.org.il with
the word "unsubscribe" in the message body, e.g., run the command
echo unsubscribe | mail linux-il-request@linux.org.il