| Jeff Abrahamson on 23 Feb 2004 04:41:02 -0000 |
|
On Sun, Feb 22, 2004 at 12:45:57PM -0500, Jeff Abrahamson wrote:
> [46 lines, 272 words, 1660 characters] Top characters: etoransd
>
> On Sun, Feb 22, 2004 at 12:31:01PM -0500, gabriel rosenkoetter wrote:
> > [24 lines, 127 words, 778 characters] Top characters: etionrad
> >
> > On Sun, Feb 22, 2004 at 11:33:25AM -0500, Jeff Abrahamson wrote:
> > > I've been googling, gdb'ing, and reading man pages for too long. Any
> > > suggestions on what I mean to do here?
> >
> > Did you read this bit:
> >
> > If from is non-nil, and the socket is not connection-oriented, the source
> > address of the message is filled in. fromlen is a value-result parame-
> > ter, initialized to the size of the buffer associated with from, and mod-
> > ified on return to indicate the actual size of the address stored there.
>
> Yup, I read that. That's why I think my code should work. ;-)
>
> Maybe I'm confused.
>
>
> > > struct sockaddr_in faddr; /* address of remote peer */
> > > int num_read;
> > >
> > > memset(&faddr, 0, sizeof(faddr));
> >
> > You're explicitly setting faddr to be exactly what will never get
> > filled in. That is, nil.
>
> I don't think so. I'm setting from to point to a structure whose
> contents are all zeroes, but fromlen I am passing as sizeof(from):
>
> memset(&faddr, 0, sizeof(faddr));
> num_read = recvfrom(sock, &buf, MAX_MSG_SIZE, 0,
> (struct sockaddr *)&faddr, &fromlen);
> ret = sendto(sock, &buf, num_read, 0,
> (struct sockaddr *)&faddr, sizeof(faddr));
>
>
> In a follow-on mail, I noted that not compiling with threads solved
> the problem. I don't understand at all why that should matter: I
> wasn't using threads, just planning to later.
David Blackman cleverly pointed out that I was missing the line
fromlen = sizeof(faddr);
before the call to recvfrom. This fixes the problem.
Thanks much for the help.
--
Jeff
Jeff Abrahamson <http://www.purple.com/jeff/>
GPG fingerprint: 1A1A BA95 D082 A558 A276 63C6 16BF 8C4C 0D1D AE4B
Attachment:
signature.asc
|
|