1
1
Fork 0
mirror of https://github.com/NixOS/nix.git synced 2025-12-22 17:01:08 +01:00

Split out socket.hh from unix-domain-socket.hh

There are other types of sockets.
This commit is contained in:
John Ericson 2025-12-17 12:24:31 -05:00
parent 30cd9e43e1
commit 79750a3ccc
3 changed files with 63 additions and 52 deletions

View file

@ -65,6 +65,7 @@ headers = files(
'signals.hh', 'signals.hh',
'signature/local-keys.hh', 'signature/local-keys.hh',
'signature/signer.hh', 'signature/signer.hh',
'socket.hh',
'sort.hh', 'sort.hh',
'source-accessor.hh', 'source-accessor.hh',
'source-path.hh', 'source-path.hh',

View file

@ -0,0 +1,61 @@
#pragma once
///@file
#include "nix/util/file-descriptor.hh"
#ifdef _WIN32
# include <winsock2.h>
#endif
namespace nix {
/**
* Often we want to use `Descriptor`, but Windows makes a slightly
* stronger file descriptor vs socket distinction, at least at the level
* of C types.
*/
using Socket =
#ifdef _WIN32
SOCKET
#else
int
#endif
;
#ifdef _WIN32
/**
* Windows gives this a different name
*/
# define SHUT_WR SD_SEND
# define SHUT_RDWR SD_BOTH
#endif
/**
* Convert a `Descriptor` to a `Socket`
*
* This is a no-op except on Windows.
*/
static inline Socket toSocket(Descriptor fd)
{
#ifdef _WIN32
return reinterpret_cast<Socket>(fd);
#else
return fd;
#endif
}
/**
* Convert a `Socket` to a `Descriptor`
*
* This is a no-op except on Windows.
*/
static inline Descriptor fromSocket(Socket fd)
{
#ifdef _WIN32
return reinterpret_cast<Descriptor>(fd);
#else
return fd;
#endif
}
} // namespace nix

View file

@ -3,10 +3,8 @@
#include "nix/util/types.hh" #include "nix/util/types.hh"
#include "nix/util/file-descriptor.hh" #include "nix/util/file-descriptor.hh"
#include "nix/util/socket.hh"
#ifdef _WIN32
# include <winsock2.h>
#endif
#include <unistd.h> #include <unistd.h>
#include <filesystem> #include <filesystem>
@ -23,55 +21,6 @@ AutoCloseFD createUnixDomainSocket();
*/ */
AutoCloseFD createUnixDomainSocket(const Path & path, mode_t mode); AutoCloseFD createUnixDomainSocket(const Path & path, mode_t mode);
/**
* Often we want to use `Descriptor`, but Windows makes a slightly
* stronger file descriptor vs socket distinction, at least at the level
* of C types.
*/
using Socket =
#ifdef _WIN32
SOCKET
#else
int
#endif
;
#ifdef _WIN32
/**
* Windows gives this a different name
*/
# define SHUT_WR SD_SEND
# define SHUT_RDWR SD_BOTH
#endif
/**
* Convert a `Socket` to a `Descriptor`
*
* This is a no-op except on Windows.
*/
static inline Socket toSocket(Descriptor fd)
{
#ifdef _WIN32
return reinterpret_cast<Socket>(fd);
#else
return fd;
#endif
}
/**
* Convert a `Socket` to a `Descriptor`
*
* This is a no-op except on Windows.
*/
static inline Descriptor fromSocket(Socket fd)
{
#ifdef _WIN32
return reinterpret_cast<Descriptor>(fd);
#else
return fd;
#endif
}
/** /**
* Bind a Unix domain socket to a path. * Bind a Unix domain socket to a path.
*/ */