From: Gaurav N. <gn...@at...> - 2003-05-20 13:17:33
|
Thanks for the amazing response, both functions work just fine now. gn On Mon, 19 May 2003, Sridhar Samudrala wrote: > On Wed, 21 May 2003, Jon Grimm wrote: > > > Gaurav Naik wrote: > > > > > > I am having trouble using the two new sockets draft calls for getting a > > > list of local/peer addrs in a association. > > > > > > I am calling sctp_getpaddrs() with the following parameters, > > > 1] socket desc of the association for int sd > > > 2] 0 (using TCP style sockets) for sctp_assoc_t id (should be ignored) > > > 3] ptr to a ptr of sockaddr_storage > > > > > > The calls always returns -1. I decided to dig into the user library to > > > see where the problem was. The call was returing from line 109 in > > > addrs.c, at which the condition was checking to see if *addrs was NULL. > > > This is where, my confusion became apparent. I figured since I was > > > passing in a ptr that was to be filled by the function, why did it matter > > > if the incoming parameter was NULL or not? i decided that this was incorrect, > > > > Yes. Its probably overly protective. > > > > > and commented it out, but the getsockopt() call on line 112 of addrs.c was > > > returning -1. I did some more digging, and determined that the > > > getsockopt() call on line 92 was returning 2 (which is correct). But that > > > is where I stopped. > > > > > > I believe I am using this calls incorrectly. Is anyone using these > > > functions? This one is a real show stopper for me right now. > > > > > > > Hmmm... addrs.c::sctp_getpaddrs doesn't look right. A couple things > > wrong... > > > > > > L48 says > > len = ret * sizeof(struct sctp_getaddrs); > > > > but len value of malloced mem should be ret * sizeof(struct > > sockaddr_storage) > > > > and the len value passed to getsockopt() should be sizeof(struct > > sctp_getaddrs). > > > > Sridhar and I just chatted on this... he'll take a look to see if there > > are any other issues. Right now this looks fairly easy to fix just > > reading the code. > > Gaurav, > > Please try out this patch and let me know if it works for you. It basically > implements the fixes Jon pointed out. > > Thanks > Sridhar > > diff -Nru a/src/lib/addrs.c b/src/lib/addrs.c > --- a/src/lib/addrs.c Mon May 19 14:47:36 2003 > +++ b/src/lib/addrs.c Mon May 19 14:47:36 2003 > @@ -45,16 +45,13 @@ > return 0; > } > > - len = ret * sizeof(struct sctp_getaddrs); > + len = ret * sizeof(struct sockaddr_storage); > > getaddrs.assoc_id = id; > getaddrs.addr_num = ret; > getaddrs.addrs = (struct sockaddr_storage *)malloc(len); > > - if (NULL == *addrs) { > - return -1; > - } > - > + len = sizeof(getaddrs); > err = getsockopt(sd, SOL_SCTP, SCTP_GET_PEER_ADDRS, (void *)&getaddrs, > &len); > if (err < 0) { > @@ -99,16 +96,13 @@ > return 0; > } > > - len = ret * sizeof(struct sctp_getaddrs); > + len = ret * sizeof(struct sockaddr_storage); > > getaddrs.assoc_id = id; > getaddrs.addr_num = ret; > getaddrs.addrs = (struct sockaddr_storage *)malloc(len); > > - if (NULL == *addrs) { > - return -1; > - } > - > + len = sizeof(getaddrs); > err = getsockopt(sd, SOL_SCTP, SCTP_GET_LOCAL_ADDRS, (void *)&getaddrs, > &len); > if (err < 0) { > > > > ------------------------------------------------------- > This SF.net email is sponsored by: ObjectStore. > If flattening out C++ or Java code to make your application fit in a > relational database is painful, don't do it! Check out ObjectStore. > Now part of Progress Software. http://www.objectstore.net/sourceforge > _______________________________________________ > Lksctp-developers mailing list > Lks...@li... > https://lists.sourceforge.net/lists/listinfo/lksctp-developers > -- -- Gaurav Naik Lockheed Martin - Advanced Technology Labs email: gnaik(at)atl.lmco.com snail: 6th Floor East; 3 Executive Campus; Cherry Hill, NJ 08002 voice: 856.792.9863 fax: 856.792.9930 |