13 #ifndef __STOUT_OS_WINDOWS_FD_HPP__
14 #define __STOUT_OS_WINDOWS_FD_HPP__
63 crt < 0 ? INVALID_HANDLE_VALUE
64 : reinterpret_cast<
HANDLE>(::_get_osfhandle(crt))) {}
77 handle == INVALID_HANDLE_VALUE
79 : ::_open_osfhandle(reinterpret_cast<intptr_t>(handle),
O_RDWR)),
87 socket_(static_cast<SOCKET>(socket)) {}
109 operator SOCKET()
const
115 operator intptr_t()
const
118 return static_cast<intptr_t
>(
socket_);
155 stream << static_cast<HANDLE>(fd);
159 stream << static_cast<SOCKET>(fd);
177 switch (left.
type()) {
179 switch (right.
type()) {
181 return left.
crt() < right.
crt();
184 if (static_cast<HANDLE>(right) == INVALID_HANDLE_VALUE) {
185 return left.
crt() < -1;
187 if (left.
crt() < 0) {
190 #pragma warning(push)
191 #pragma warning(disable : 4312)
194 return reinterpret_cast<HANDLE>(left.
crt()) <
195 static_cast<HANDLE>(right);
199 if (static_cast<SOCKET>(right) == INVALID_SOCKET) {
200 return left.
crt() < -1;
202 if (left.
crt() < 0) {
205 return static_cast<SOCKET
>(left.
crt()) < static_cast<SOCKET>(right);
210 switch (right.
type()) {
212 if (static_cast<HANDLE>(left) == INVALID_HANDLE_VALUE) {
213 return -1 < right.
crt();
215 if (right.
crt() < 0) {
218 #pragma warning(push)
219 #pragma warning(disable : 4312)
222 return static_cast<HANDLE>(left) <
223 reinterpret_cast<HANDLE>(right.
crt());
227 return static_cast<HANDLE>(left) < static_cast<HANDLE>(right);
230 return static_cast<HANDLE>(left) <
231 reinterpret_cast<HANDLE>(static_cast<SOCKET>(right));
236 switch (right.
type()) {
238 if (static_cast<SOCKET>(left) == INVALID_SOCKET) {
239 return -1 < right.
crt();
241 if (right.
crt() < 0) {
244 return static_cast<SOCKET
>(left) < static_cast<SOCKET>(right.
crt());
247 return reinterpret_cast<HANDLE>(
static_cast<SOCKET
>(left)) <
248 static_cast<HANDLE>(right);
251 return static_cast<SOCKET
>(left) < static_cast<SOCKET>(right);
292 return !(left > right);
310 return !(left < right);
336 switch (left.
type()) {
338 switch (right.
type()) {
340 return left.
crt() == right.
crt();
343 if (static_cast<HANDLE>(right) == INVALID_HANDLE_VALUE) {
344 return left.
crt() == -1;
346 if (left.
crt() < 0) {
349 #pragma warning(push)
350 #pragma warning(disable : 4312)
353 return reinterpret_cast<HANDLE>(left.
crt()) ==
354 static_cast<HANDLE>(right);
358 if (static_cast<SOCKET>(right) == INVALID_SOCKET) {
359 return left.
crt() == -1;
361 if (left.
crt() < 0) {
364 return static_cast<SOCKET
>(left.
crt()) == static_cast<SOCKET>(right);
369 switch (right.
type()) {
371 if (static_cast<HANDLE>(left) == INVALID_HANDLE_VALUE) {
372 return -1 == right.
crt();
374 if (right.
crt() < 0) {
377 #pragma warning(push)
378 #pragma warning(disable : 4312)
381 return static_cast<HANDLE>(left) ==
382 reinterpret_cast<HANDLE>(right.
crt());
386 return static_cast<HANDLE>(left) == static_cast<HANDLE>(right);
389 return static_cast<HANDLE>(left) ==
390 reinterpret_cast<HANDLE>(static_cast<SOCKET>(right));
395 switch (right.
type()) {
397 if (static_cast<SOCKET>(left) == INVALID_SOCKET) {
398 return -1 == right.
crt();
400 if (right.
crt() < 0) {
403 return static_cast<SOCKET
>(left) == static_cast<SOCKET>(right.
crt());
406 return reinterpret_cast<HANDLE>(
static_cast<SOCKET
>(left)) ==
407 static_cast<HANDLE>(right);
410 return static_cast<SOCKET
>(left) == static_cast<SOCKET>(right);
433 return !(left == right);
453 struct hash<os::WindowsFD>
468 return static_cast<result_type>(
static_cast<SOCKET
>(fd));
477 #endif // __STOUT_OS_WINDOWS_FD_HPP__
bool operator>=(const WindowsFD &left, const WindowsFD &right)
Definition: fd.hpp:308
Type type() const
Definition: fd.hpp:121
SOCKET socket_
Definition: fd.hpp:142
bool operator==(const WindowsFD &left, const WindowsFD &right)
Definition: fd.hpp:330
result_type operator()(const argument_type &fd) const
Definition: fd.hpp:458
int crt_
Definition: fd.hpp:139
constexpr Handle HANDLE
Definition: ingress.hpp:37
Type
Definition: fd.hpp:50
bool operator<(const WindowsFD &left, const WindowsFD &right)
Definition: fd.hpp:171
WindowsFD(HANDLE handle)
Definition: fd.hpp:74
WindowsFD(int crt)
Definition: fd.hpp:59
#define UNREACHABLE()
Definition: unreachable.hpp:22
int crt() const
Definition: fd.hpp:97
bool operator!=(const WindowsFD &left, const WindowsFD &right)
Definition: fd.hpp:431
std::ostream & operator<<(std::ostream &stream, const ProcessTree &tree)
Definition: process.hpp:126
WindowsFD & operator=(const WindowsFD &)=default
WindowsFD(SOCKET socket)
Definition: fd.hpp:82
WindowsFD(intptr_t socket)
Definition: fd.hpp:85
#define O_RDWR
Definition: fcntl.hpp:27
Try< Netlink< struct nl_sock > > socket(int protocol=NETLINK_ROUTE)
Definition: internal.hpp:91
bool operator>(const WindowsFD &left, const WindowsFD &right)
Definition: fd.hpp:272
bool operator<=(const WindowsFD &left, const WindowsFD &right)
Definition: fd.hpp:290
size_t result_type
Definition: fd.hpp:456
HANDLE handle_
Definition: fd.hpp:140