I got the onion router to work under windows!

Bruce Montrose montrose at itd.nrl.navy.mil
Tue Jul 29 14:43:23 UTC 2003


Aside from the missing stdint.h that I mentioned before, there was another
problem that only occurred when the Windows onion router was chosen as an
exit node. The problem was caused by the Windows onion router not detecting
when the connection was closed.

Upon further investigation I discovered that the poll() function was
behaving quite differently when a connection was closed under Windows. More
precisely, under Windows poll() would put POLLHUP into revents instead of
POLLIN as it did under the many different LINUX distributions that I tested
this on. So to get the onion router to work properly under Windows, I simply
added a second condition that would allow the calling of conn_read()
whenever POLLHUP was put into revents by poll() in main.c like this:

        if(poll_array[i].revents & POLLIN ||
           poll_array[i].revents & POLLHUP ) /* something to read */
          conn_read(i); /* this also blows away broken connections */

I have attached a little test program that demonstrates this peculiar
behavior of the poll() function. Here is the output of the test program when
I ran it under Windows and Linux:

Windows
------------------
[montrose at kiwi]$ !gcc
gcc -o bug bug.c -lpthread
[montrose at kiwi]$ ./bug
close: POLLHUP
shutdown: POLLHUP


Linux
------------------
[montrose at ced]$ !gcc
gcc -o bug bug.c -lpthread
[montrose at ced]$ ./bug
close: POLLIN 
shutdown: POLLIN

-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: bug.c
URL: <http://lists.torproject.org/pipermail/tor-dev/attachments/20030729/ea89a6c5/attachment.asc>


More information about the tor-dev mailing list