gethostbyname(my_name) and IL2-Sturmovik
Juan Lang
juan_lang at yahoo.com
Wed Dec 14 11:11:05 CST 2005
Hi David, thanks for continuing to work on this.
> What's wrong with the new version?
The first thing to make it acceptable is to write a regression test to go
along with it. I think the test should check that
gethostbyname(your_host_name) returns something besides 127.0.0.1, _if_
you in fact have a public IP address. Perhaps use SIOCGIFCONF in the test
to check whether you do have a public IP.
+ BOOL getpublicIP(char* target,int size)
The name should be spelled get_public_ip or so, and this should be static.
+ if (skfd < 0)
+ {
+ WARN("A socket could not be created");
+ return FALSE;
+ }
On any failure you need to SetLastError with an appropriate error.
+ if(ip[0]==127&&ip[1]==0&&ip[2]==0&&ip[3]==0)continue; /*Exclude
127.0.0.1*/
+
+ sprintf(buffer,"%i.%i.%i.%i",
(int)ip[0],(int)ip[1],(int)ip[2],(int)ip[3]);
I think this is specific to little-endian machines, this should succeed on
big-endian machines too. (Not all uses of Wine are to run x86
executables.)
+ if(strcmp(ifr[i].ifr_name,"lo")==0)continue;
+ if(size>strlen(buffer))strcpy(target,buffer);
Some spaces somewhere would be nice :)
+ char myname[1000];
+ gethostname(myname,(size_t)1000);
In WS_gethostbyname you pay a penalty of doing a gethostname call every
time. I think this could be optimized. For instance, you could only
check it if the returned address is 127.0.0.1. Also, I'm not sure about
declaring a buffer of 1000 bytes on the stack. It's also unnecessary:
according to rfc1035, each name label is at most 255 chars. I assume, at
any rate, that gethostname will not return a dotted name, but a single
label.
To get this off the stack altogether, you could have a static buffer
that's set every time WS_gethostname is called. WS_gethostbyname could
use this value instead of calling gethostname(2) itself. I'm not sure
whether this optimization is worth it. If you use a static buffer, it
needs to be protected by a critical section.
--Juan
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
More information about the wine-devel
mailing list