Return to BSD News archive
Path: euryale.cc.adfa.oz.au!newshost.carno.net.au!harbinger.cc.monash.edu.au!munnari.OZ.AU!news.ecn.uoknor.edu!feed1.news.erols.com!howland.erols.net!EU.net!uknet!usenet1.news.uk.psi.net!uknet!dispatch.news.demon.net!demon!microl.demon.co.uk!tarrant.microlise.co.uk!news
From: andrewg@microlise.co.uk (Andrew Gierth)
Newsgroups: comp.unix.programmer,comp.unix.bsd.freebsd.misc
Subject: Re: UDP Sockets sendto() failures
Date: 04 Jan 1997 22:15:26 +0000
Organization: Microlise Engineering Ltd.
Lines: 47
Message-ID: <ufk9ptm6ip.fsf@zen.microlise.co.uk>
References: <E3DxuK.6I8@netplex-tech.com> <E3H7yK.18t@netplex-tech.com>
NNTP-Posting-Host: zen.microlise.co.uk
X-NNTP-Posting-Host: microl.demon.co.uk
In-reply-to: vikas@netplex-tech.Com's message of Sat, 4 Jan 1997 09:06:19 GMT
X-Attribution: AG
X-Mayan-Date: Long count = 12.19.3.14.8; tzolkin = 9 Lamat; haab = 11 Kankin
X-Geek: (V3.1)
GCS/IT/CC d-(pu) s:+> a- C++++$ UACHV++++$ P--- L E++ W(--) N+++ o? K? w---
O+++ M- V-- PS+ PE Y+(--) PGP- t+@ 5+++ X R@ tv(-) b++ DI? !D G++ e h* !r y
Cc: Vikas Aggarwal <vikas@netplex-tech.Com>
X-Newsreader: Gnus v5.1
Xref: euryale.cc.adfa.oz.au comp.unix.programmer:48310 comp.unix.bsd.freebsd.misc:33541
>>>>> "Vikas" == Vikas Aggarwal <vikas@netplex-tech.Com> writes:
Vikas> Since a number of people have suggested that it is more likely that I
Vikas> have a bug in my code, I am posting my code below.
A bug indeed - byte-order claims another victim.
Vikas> * I cannot seem to get sendto() working on FreeBSD 2.1.x (works on
Vikas> * SunOS 4.1.x)
This is a BIG, BIG clue that should shout "BYTE ORDER" at you loudly.
Sparcs and 68000's are big-endian, which makes them tolerant of missing
conversions, since host and network byte-order are the same. x86's are
little-endian, so the conversions matter.
Vikas> /*
Vikas> * Send a UDP message on an open file descriptor to the destination specified.
Vikas> */
Vikas> send_udpmesg(buf, bufsize, dgramfd, host, port)
Vikas> char *buf;
Vikas> char *host; /* destination IP address */
Vikas> int port, bufsize, dgramfd;
*Always*, *ALWAYS*, document, for port numbers, whether they are in host
or network order.
Vikas> {
Vikas> int nsent;
Vikas> static int connected;
Vikas> char *desthost;
Vikas> struct sockaddr_in dest_addr_in;
Vikas> if (host == NULL) desthost = "127.0.0.1"; /* localhost */
Vikas> else desthost = host;
Vikas> bzero(&dest_addr_in, sizeof(dest_addr_in));
Vikas> dest_addr_in.sin_family = AF_INET;
Vikas> dest_addr_in.sin_addr.s_addr = inet_addr(desthost);
Vikas> dest_addr_in.sin_port = port;
sin_port must always be in network order... you need an htons() call there.
--
Andrew Gierth (andrewg@microlise.co.uk)
"Ceterum censeo Microsoftam delendam esse" - Alain Knaff in nanam