|
From: mitchmcc on 3 Jul 2008 16:32 I have a simple UDP client program where getsockname appears to be behaving incorrectly. This is on Solaris 10. This is more or less what I am doing. You can find many examples of code like this on the web... I do more error checking. :-) struct sockaddr_in server; server.sin_family = AF_INET; server.sin_addr.s_addr = htonl(INADDR_ANY); server.sin_port = htons(0); /*** Create socket on which to send and receive ***/ sd = socket (AF_INET,SOCK_DGRAM,0); bind( sd, (SA *) &server, sizeof(server) ); /*** get port information and prints it out ***/ length = sizeof(server); getsockname (sd, (SA *)&server,&length) ); printf("Server Port is: %d\n", ntohs(server.sin_port)); So I am asking for INADDR_ANY and port 0 initially, which means "give me any port". The problem is getsockname is returning 0, which causes a problem in my application. Has anyone seen this, or can anyone guess what might cause it? I *do* check the return from getsockname, and it is NOT returning an error. Thanks, Mitch
From: Neo - Techpulp on 12 Jul 2008 14:10 On Jul 4, 1:32 am, "mitch...(a)yahoo.com" <mitch...(a)yahoo.com> wrote: > I have a simple UDP client program where getsockname appears to be > behaving incorrectly. This is on Solaris 10. > > This is more or less what I am doing. You can find many > examples of code like this on the web... I do more error > checking. :-) > > struct sockaddr_in server; > > server.sin_family = AF_INET; > server.sin_addr.s_addr = htonl(INADDR_ANY); > server.sin_port = htons(0); > > /*** Create socket on which to send and receive ***/ > sd = socket (AF_INET,SOCK_DGRAM,0); > > bind( sd, (SA *) &server, sizeof(server) ); > > /*** get port information and prints it out ***/ > length = sizeof(server); > getsockname (sd, (SA *)&server,&length) ); > > printf("Server Port is: %d\n", ntohs(server.sin_port)); > > So I am asking for INADDR_ANY and port 0 initially, which > means "give me any port". > > The problem is getsockname is returning 0, which causes > a problem in my application. > > Has anyone seen this, or can anyone guess what might > cause it? > > I *do* check the return from getsockname, and it is NOT returning > an error. > > Thanks, > > Mitch Hi Mitch, There seems to be no error in your code. However you can check the following article and copy paste the example program and verify if it works for you. http://www.techpulp.com/articles/networking/snip-find-local-addr-using-getsockname.php It works well in Linux. I don't see any reason why it shouldn't work in Solaris. - Neo Techpulp Technologies
|
Pages: 1 Prev: Strange 'find' feature Next: SunBlade 100 / NVRAM defect / OBP 4.x |