I agree it would be nice to document the supported operations on an `int_fd`.
I'm not sure how to actually help with the issue of making `int_fd` more discoverable. The only idea I've got is a ClangTidy check to complain about variables of type `int` named `fd` and other similar common names for file descriptors such as `socket`. Thanks, MPark On Thu, Nov 30, 2017 at 4:41 PM Benjamin Mahler <bmah...@apache.org> wrote: > On Thu, Nov 30, 2017 at 11:12 PM, Andrew Schwartzmeyer < > and...@schwartzmeyer.com> wrote: > > > For Linux it is literally an `int`: > > > > using int_fd = int; > >> > > > > https://github.com/apache/mesos/blob/bf4bc6380cb99132736fbbe > > fc85f3a7ca60b032c/3rdparty/stout/include/stout/os/int_fd.hpp#L35 > > > > > Yes I realize that :) > > > > 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`? > > > Yes, we have code using int_fd within hashmaps, maps, etc, already across > platforms so I assume it has the properties I listed on windows, but it > would be good to document that as being something that int_fd is guaranteed > to provide. > > > > > > > > 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 > >>> > >>> >