> Well.. the problem is not the "function returns immediatly".. it's just that
> we need UI events to get processed to avoid the windows freezing...
> You also told me on MSN that the host resolving is fast.. yes it IS fast...
> I already tested this, it takes very few milliseconds to get the ip of a
> host.. BUT it is VERY dependant on your connection...
> in other words, if you have a very very slow connection (or a lot of packet
> drops.. since it's UDP), then it will be slow... but most importantly...
> when you have no connection at all, it will completely block until it times
> out (5 or 10 seconds iirc)...
Yes, I agree.
> which means that when you loose your internet connection, and amsn tries to
> auto-reconnect for example, it will freeze for 5-10 seconds completely until
> the dns resolution times out...and that's the real problem...
> In any case, it will be asynchronous since the 'socket' will not 'block', it
> will create a thread, resolve asynchronously, and the 'update' will get you
> back into the Tcl main loop which will continue processing events, this is
> exactly what we need...
Good, then I'm getting my hands on it.
> Anyways, about gethostbyname_r, as I told you before, I wrote some code for
> resolving the hostname in the tcl_farsight extension.. and it is portable to
> windows/mac/etc...
> here's the code :
> static char *host2ip(char *hostname)
> {
> struct addrinfo * result;
> static char ip[30];
> char * ret;
> int error;
>
> error = getaddrinfo(hostname, NULL, NULL, &result);
> if (error != 0) {
> return NULL;
> }
>
> if (result) {
> ret = inet_ntop (AF_INET,
> &((struct sockaddr_in *) result->ai_addr)->sin_addr,
> ip, INET_ADDRSTRLEN);
> freeaddrinfo (result);
> if (ret == NULL) {
> return NULL;
> }
> }
>
> return ip;
> }
>
> Note that the function returns the ip as a string and from a static
> variable, so you don't need to free any allocated memory by the function,
> but calling the function twice will erase the previous value, so once you
> call that, you need to strdup() the string before storing it anywhere... I
> think that if you do a Tcl_NewStringObj(str), it will copy it already
> though...
Nice, I didn't use it previously because I was at work and just made a
quick try.
> ok, we can do it in a much better way.. for example, right now, the code
> looks like this :
> set i 0
> while { 1 } {
> set subnode [GetXmlNode $xml $path $i]
> incr i
> if {$subnode == "" } { break }
> ...
> }
> where the GetXmlNode parses from the beginning and compares the index with
> the requested one.. so the first iteration will parse until it finds $path..
> the second iteration will parse until it finds $path, then skip it then
> parse again.. the 100 iteration will reparse the 99 first $path tags that
> were already parsed 99 times before... So maybe we could do something like
> this :
> set subnodes [GetAllXmlNodes $xml $path]
> for {set i 0 } {$i < [llength $subnodes] } { incr i } {
> set subnode [lindex $subnodes $i]
> ....
> }
That's exactly what I thought too... I'll take a look.
Greets.
--
(:===========================================:)
Alvaro J. Iradier Muro - [EMAIL PROTECTED]
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Amsn-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/amsn-devel