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

Attachment: 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: $!";

Reply via email to