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
> >>>
> >>>
>

Reply via email to