On #amanda, I've been working with Scott Bender, who's trying to build Amanda-2.6.0 on HP/UX 11.11. He's gotten all of the prereqs installed, but is having some trouble with network communication.
We've boiled the problem down to recvfrom(..) not returning an address
for incoming UDP packets. I built the attached C "server" to
duplicate this; the perl script acts as a client. Scott runs the C
app on the HP/UX machine, and then runs
perl client.pl $HPUX_IP
on another box. Here's what he sees:
(sockaddr_in *)800003ffff7f2fa0 = { 2, 1234, 0.0.0.0 }
Got 2 bytes; return addrlen is 16; sizeof ss is 16
(sockaddr_in *)800003ffff7f2fa0 = { 2, 1234, 0.0.0.0 }
the second one of those *should* contain the IP address of the box on
which client.pl was run, and a randomly assigned port. That port 1234
still appears implies recvfrom() isn't overwriting the address at all.
The manpage (http://www.informatik.uni-frankfurt.de/doc/man/hpux/recv.2.html)
doesn't mention anything of the sort.
At this point, I'm pretty much stumped. Can you help out with any of
- thoughts on what I'm doing wrong here
- pointers to an HP/UX forum or mailing list where I could ask this question
- an HP/UX box I can play around on for a little while
Thanks!
Dustin
--
Storage Software Engineer
http://www.zmanda.com
36203.c
Description: Binary data
#! /usr/bin/perl
use warnings;
use strict;
use Socket;
use Sys::Hostname;
my $iaddr = gethostbyname(hostname());
my $proto = getprotobyname('udp');
my $paddr = sockaddr_in(0, $iaddr); # 0 means let kernel pick
socket(SOCKET, PF_INET, SOCK_DGRAM, $proto) || die "socket: $!";
bind(SOCKET, $paddr) || die "bind: $!";
my ($hispaddr, $hisiaddr, $hisport);
$hisport = 9999;
$hisiaddr = inet_aton($ARGV[0]) || die "unknown host " . $ARGV[0];
$hispaddr = sockaddr_in($hisport, $hisiaddr);
defined(send(SOCKET, "hi", 0, $hispaddr)) || die "send: $!";
