| Jeff Abrahamson on 22 Feb 2004 17:51:02 -0000 |
|
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.
--
Jeff
Jeff Abrahamson <http://www.purple.com/jeff/>
GPG fingerprint: 1A1A BA95 D082 A558 A276 63C6 16BF 8C4C 0D1D AE4B
Attachment:
signature.asc
|
|