For Linux it is literally an `int`:
using int_fd = int;
https://github.com/apache/mesos/blob/bf4bc6380cb99132736fbbefc85f3a7ca60b032c/3rdparty/stout/include/stout/os/int_fd.hpp#L35
So it's a safe drop-in replacement on non-Windows platforms, with all
the same properties of an `int`.
It's only on Windows where it is instead `os::WindowsFD`, and then you
may need to worry about its properties and semantics. Do you want these
documented in `stout/os/windows/fd.hpp`?
On 11/30/2017 3:05 pm, Benjamin Mahler wrote:
Is it possible to document in that header the properties of int_fd that
we
can rely on?
For example, it has a hash defined for use in unordered map, set, etc.
It's
a POD type, etc.
On Wed, Nov 29, 2017 at 10:17 PM, Andrew Schwartzmeyer <
and...@schwartzmeyer.com> wrote:
Hello everyone!
I've realized that a lot of developers working in libprocess (and
elsewhere) may not know about how to handle file descriptors in a
cross-platform way for Mesos.
IMPORTANT: You cannot just use `int`. File descriptors on Windows are
various types of handles, but not just an `int`.
The abstraction we use in Mesos is `int_fd`, found here:
https://github.com/apache/mesos/blob/master/3rdparty/stout/
include/stout/os/int_fd.hpp
On non-Windows platforms, it's just an `int`. But on Windows, it's a
`WindowsFD` which can be an `int` (from the Windows CRT which we're
deprecating), a `HANDLE` (the Windows 32 API), and a `SOCKET` (from
the
WinSock library). If you're curious, the implementation is here:
https://github.com/apache/mesos/blob/master/3rdparty/stout/
include/stout/os/windows/fd.hpp
I just want you to be aware that if you're writing code and need an
`int`
file descriptor, please use `int_fd` (and include the appropriate
header)
instead of `int`, as otherwise you break the Windows build.
Thank you,
Andy