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