Even if you are measuring the timeout _as implemented by Winsock_
precisely (which is probably not the case), the fact is that AFAIK there
is no guarantee of specific precision for the timeout.
More likely, you are observing the time between some checkpoint (e.g.
receiving data, setting the timeout, etc.) and when the timeout actually
is noticed by your own code. And in that case, even if the timeout is
signaled to the nearest nanosecond by Winsock, there is no guarantee in
a non-real-time operating system like Windows that your own code will be
able to observe that signal in any specific time period.
There may be some real overhead in Winsock that is _also_ preventing an
exact timeout from being observed. But the fact is, a receive timeout
of even as long as 1 second is ridiculously short, a half second error
on the timeout should not be a problem at all for your code, and in all
likelihood you should really be implementing your own timeout logic in
your own code rather than using the receive timeout value in the socket
itself.
So, in other words...what you're describing sounds perfectly fine to me. :)
Pete