summaryrefslogtreecommitdiff
path: root/src/platform/windows
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2023-12-18 01:12:01 -0800
committerGarrett D'Amore <garrett@damore.org>2023-12-29 15:20:21 -0800
commit9caabf76621ba81e7fed5df42971f355b648ff59 (patch)
tree2f243965e202862f36c9d57c3053f57806bf70cf /src/platform/windows
parente5261536d4f72dccbf1a424bfe426f9635b9d1c3 (diff)
downloadnng-9caabf76621ba81e7fed5df42971f355b648ff59.tar.gz
nng-9caabf76621ba81e7fed5df42971f355b648ff59.tar.bz2
nng-9caabf76621ba81e7fed5df42971f355b648ff59.zip
fixes #1746 Create a new socket:// transport for socketpair() based connections
This transport only listens, and creates connections when the application calls setopt on the lister with NNG_OPT_SOCKET_FD, to pass a file descriptor. The FD is turned into an nng_stream, and utilized for SP. The protocol over the descriptor is identical to the TCP protocol (not the IPC protocol). The options for peer information are borrowed from the IPC transport, as they may be useful for these purposes. This includes a test suite and full documentation.
Diffstat (limited to 'src/platform/windows')
-rw-r--r--src/platform/windows/CMakeLists.txt1
-rw-r--r--src/platform/windows/win_socketpair.c57
2 files changed, 58 insertions, 0 deletions
diff --git a/src/platform/windows/CMakeLists.txt b/src/platform/windows/CMakeLists.txt
index d1d158e0..adf67ebd 100644
--- a/src/platform/windows/CMakeLists.txt
+++ b/src/platform/windows/CMakeLists.txt
@@ -39,6 +39,7 @@ if (NNG_PLATFORM_WINDOWS)
win_rand.c
win_resolv.c
win_sockaddr.c
+ win_socketpair.c
win_tcp.c
win_tcpconn.c
win_tcpdial.c
diff --git a/src/platform/windows/win_socketpair.c b/src/platform/windows/win_socketpair.c
new file mode 100644
index 00000000..0ed0443a
--- /dev/null
+++ b/src/platform/windows/win_socketpair.c
@@ -0,0 +1,57 @@
+//
+// Copyright 2023 Staysail Systems, Inc. <info@staysail.tech>
+//
+// This software is supplied under the terms of the MIT License, a
+// copy of which should be located in the distribution where this
+// file was obtained (LICENSE.txt). A copy of the license may also be
+// found online at https://opensource.org/licenses/MIT.
+//
+
+#include "core/nng_impl.h"
+
+
+#ifdef NNG_HAVE_SOCKETPAIR_TODO
+// TODO: Windows lacks socketpair. We can emulate it with an explcit
+// implementation based on AF_UNIX.
+
+#include <errno.h>
+#include <sys/socket.h>
+
+int
+nni_socket_pair(int *fds)
+{
+ int rv;
+ rv = socketpair(PF_UNIX, SOCK_STREAM, 0, fds);
+ if (rv != 0) {
+ return (nni_plat_errno(errno));
+ }
+
+ return (0);
+}
+#else
+int
+nni_socket_pair(int fds[2])
+{
+ NNI_ARG_UNUSED(fds);
+ return (NNG_ENOTSUP);
+}
+
+// This is also the fdc transport.
+
+typedef struct nni_sfd_conn nni_sfd_conn;
+
+void
+nni_sfd_close_fd(int fd)
+{
+ NNI_ARG_UNUSED(fd);
+}
+
+int
+nni_sfd_conn_alloc(nni_sfd_conn **cp, int fd)
+{
+ NNI_ARG_UNUSED(cp);
+ NNI_ARG_UNUSED(fd);
+ return (NNG_ENOTSUP);
+}
+
+#endif