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
|
|