This reverts commit 98bcddc. It's making a lot of tests in the node.js test suite fail.
* abort() if close() fails * set fd to -1 after close() to prevent double close bugs
uv_guess_handle is currently squelching both fifo and all sockets on to the UV_NAMED_PIPE type. Rather than treating all sockets as UV_NAMED_PIPE, use getsockopt() and getsockaddr() to determine if the socket is an AF_UNIX stream (in which case return UV_NAMED_PIPE), or an AF_INET stream (in which case return UV_TCP), or an AF_INET datagram socket (in which case return UV_UDP). Additionally, currently all other file descriptor types are squelched to the UV_FILE type. Instead, only file descriptors that are marked as regular files are treated as UV_FILE. All other types (such as directories, character and block devices) are now treated as UV_UNKNOWN_HANDLE.
Replace `void f()` with `void f(void)`; the former means "a function that takes any number of arguments, including none" while the latter is what is actually intended: a function taking no arguments. The first form also isn't strictly conforming ANSI/ISO C.
Fixes a bug where timers expire prematurely when the following conditions hold: a) libuv first spends some time blocked in the platform poll function b) a callback then calls uv_timer_start() Cause: uv_timer_start() uses an out-of-date loop->time in its 'when should the timer callback run?' calculations. Solution: Update loop->time before invoking any callbacks. Fixes #678.
This commit renames the various uv_hrtime() implementations to uv__hrtime(). Libuv uses the high-res timer internally in performance-critical code paths. Calling the non-public version avoids going through the PLT when libuv is compiled as a shared object. The exported uv_hrtime() now has a single definition in src/unix/core.c that calls uv__hrtime(). A future optimization is to lift the uv__hrtime() declarations into header files so they can be inlined at the call sites. Then again, linking with -flto should accomplish the same thing.