Win32 Port
Tor Lillqvist
tml at iki.fi
Tue May 2 03:49:26 PDT 2006
> Tor Lillqvist schrieb:
> > I once had a test program to check this but can't find it
> > right now, but IIRC you didn't even have to try very hard to get
> > overlap (no need to open a stupendous amount of files or sockets).
Ralf Habacker writes:
> How do you have performed the test if you don't open sockets or files ?
Uh, did I say I did? My test program did what yours does, more or
less, except that it explicitly looked for overlaps and didn't bother
outputting much else.
> The following test program shows me that on Windows XP socket and file
> descriptors are unique.
Please note that to prove something doesn't happen a quite strong
proof is needed. On the other hand, to disprove it, just one
counter-example is needed...
> C:\Daten\kde4\dbus-test>test
> listen_fd=1784 file_fd=3 listen_handle=-1 file_handle=1776
> ..
> listen_fd=996 file_fd=101 listen_handle=-1 file_handle=992
> listen_fd=988 file_fd=102 listen_handle=-1 file_handle=984
Ah, but you conveniently run only 100 loops in your program. As you
should have noticed the socket number keeps decreasing. If you would
have run the loop longer, you would have seen overlap... When I change
the 100 to 1000, the interesting parts of the output are:
listen_fd=232 file_fd=212 listen_handle=-1 file_handle=228
listen_fd=224 file_fd=213 listen_handle=-1 file_handle=220
listen_fd=216 file_fd=214 listen_handle=-1 file_handle=212
listen_fd=208 file_fd=215 listen_handle=260 file_handle=204
listen_fd=200 file_fd=216 listen_handle=324 file_handle=196
listen_fd=192 file_fd=217 listen_handle=388 file_handle=188
listen_fd=184 file_fd=218 listen_handle=452 file_handle=180
...
listen_fd=88 file_fd=230 listen_handle=1220 file_handle=84
listen_fd=80 file_fd=231 listen_handle=1284 file_handle=76
listen_fd=72 file_fd=232 listen_handle=1348 file_handle=68
...
listen_fd=24 file_fd=238 listen_handle=1732 file_handle=20
listen_fd=16 file_fd=239 listen_handle=1796 file_handle=12
listen_fd=8 file_fd=240 listen_handle=1868 file_handle=4
listen_fd=2052 file_fd=241 listen_handle=-1 file_handle=2056
listen_fd=2060 file_fd=242 listen_handle=-1 file_handle=2064
listen_fd=2068 file_fd=243 listen_handle=-1 file_handle=2072
On this run of the program, the socket numbers (listen_fd above)
returned from subsequent socket() calls start at 1940 and keep
decreasing by eight until they reach 8, then they jump to 2056 and
start increasing. This is most likely behaviour that is not set in
stone, but just what happens on my machine right now. In other
circumstances, the socket numbers might perhaps start much lower, so
that one wouldn't need to have hundreds of sockets open to reach the
lower numbers that are likely to also be valid file descriptors.
--tml
More information about the dbus
mailing list