diff --git a/src/or/main.c b/src/or/main.c index 766fcfb6b7..e0777200c9 100644 --- a/src/or/main.c +++ b/src/or/main.c @@ -695,12 +695,42 @@ static void dumpstats(int severity) { (int) (stats_n_bytes_read/stats_n_seconds_reading)); } +int network_init(void) +{ +#ifdef MS_WINDOWS + /* This silly exercise is necessary before windows will allow gethostbyname to work. + */ + WSADATA WSAData; + int r; + r = WSAStartup(0x101,&WSAData); + if (r) { + log_fn(LOG_WARN,"Error initializing windows network layer: code was %d",r); + return -1; + } + /* XXXX We should call WSACleanup on exit, I think. */ +#endif + return 0; +} + +void exit_function(void) +{ +#ifdef MS_WINDOWS + WSACleanup(); +#endif +} + int tor_main(int argc, char *argv[]) { /* give it somewhere to log to initially */ add_stream_log(LOG_INFO, "", stdout); log_fn(LOG_WARN,"Tor v%s. This is experimental software. Do not use it if you need anonymity.",VERSION); + if (network_init()<0) { + log_fn(LOG_ERR,"Error initializing network; exiting."); + return 1; + } + atexit(exit_function); + if (init_from_config(argc,argv) < 0) return -1; @@ -708,7 +738,7 @@ int tor_main(int argc, char *argv[]) { if(geteuid()==0) log_fn(LOG_WARN,"You are running Tor as root. You don't need to, and you probably shouldn't."); #endif - + if(options.ORPort) { /* only spawn dns handlers if we're a router */ dns_init(); /* initialize the dns resolve tree, and spawn workers */ } diff --git a/src/win32/orconfig.h b/src/win32/orconfig.h index c8e089fb3c..6fd90bf37e 100644 --- a/src/win32/orconfig.h +++ b/src/win32/orconfig.h @@ -148,7 +148,7 @@ #define STDC_HEADERS /* Version number of package */ -#define VERSION "0.0.2pre6" +#define VERSION "0.0.2pre26" /* XXXX WWWW */ #define CONFDIR ""