aboutsummaryrefslogtreecommitdiff
path: root/src/arm
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2011-12-06 17:58:40 +0000
committerChristian Grothoff <christian@grothoff.org>2011-12-06 17:58:40 +0000
commitd234059375e77fe46c57e98751dc8491dff46e85 (patch)
treef2c73e373b9e7a01af71b2fa1ba0d5feb41881cf /src/arm
parentafa1f268d5275e134566924a84e05ce631396cdb (diff)
downloadgnunet-d234059375e77fe46c57e98751dc8491dff46e85.tar.gz
gnunet-d234059375e77fe46c57e98751dc8491dff46e85.zip
Implement passing sockets in IPC on W32 (#1975)
Diffstat (limited to 'src/arm')
-rw-r--r--src/arm/do_start_process.c2
-rw-r--r--src/arm/gnunet-service-arm.c4
-rw-r--r--src/arm/gnunet-service-arm.h2
-rw-r--r--src/arm/gnunet-service-arm_interceptor.c12
4 files changed, 14 insertions, 6 deletions
diff --git a/src/arm/do_start_process.c b/src/arm/do_start_process.c
index 19b3bc224..f4d3424ff 100644
--- a/src/arm/do_start_process.c
+++ b/src/arm/do_start_process.c
@@ -13,7 +13,7 @@
13 * @return PID of the started process, -1 on error 13 * @return PID of the started process, -1 on error
14 */ 14 */
15static struct GNUNET_OS_Process * 15static struct GNUNET_OS_Process *
16do_start_process (const int *lsocks, const char *first_arg, ...) 16do_start_process (const SOCKTYPE *lsocks, const char *first_arg, ...)
17{ 17{
18 va_list ap; 18 va_list ap;
19 char **argv; 19 char **argv;
diff --git a/src/arm/gnunet-service-arm.c b/src/arm/gnunet-service-arm.c
index 718d90280..d99020d84 100644
--- a/src/arm/gnunet-service-arm.c
+++ b/src/arm/gnunet-service-arm.c
@@ -331,7 +331,7 @@ free_service (struct ServiceList *pos)
331 * @param lsocks -1 terminated list of listen sockets to pass (systemd style), or NULL 331 * @param lsocks -1 terminated list of listen sockets to pass (systemd style), or NULL
332 */ 332 */
333static void 333static void
334start_process (struct ServiceList *sl, const int *lsocks) 334start_process (struct ServiceList *sl, const SOCKTYPE *lsocks)
335{ 335{
336 char *loprefix; 336 char *loprefix;
337 char *options; 337 char *options;
@@ -422,7 +422,7 @@ start_process (struct ServiceList *sl, const int *lsocks)
422 */ 422 */
423int 423int
424start_service (struct GNUNET_SERVER_Client *client, const char *servicename, 424start_service (struct GNUNET_SERVER_Client *client, const char *servicename,
425 const int *lsocks) 425 const SOCKTYPE *lsocks)
426{ 426{
427 struct ServiceList *sl; 427 struct ServiceList *sl;
428 char *binary; 428 char *binary;
diff --git a/src/arm/gnunet-service-arm.h b/src/arm/gnunet-service-arm.h
index 689f26c82..8b17ec816 100644
--- a/src/arm/gnunet-service-arm.h
+++ b/src/arm/gnunet-service-arm.h
@@ -37,7 +37,7 @@
37 */ 37 */
38int 38int
39start_service (struct GNUNET_SERVER_Client *client, const char *servicename, 39start_service (struct GNUNET_SERVER_Client *client, const char *servicename,
40 const int *lsocks); 40 const SOCKTYPE *lsocks);
41 41
42/** 42/**
43 * Stop listening for connections to a service. 43 * Stop listening for connections to a service.
diff --git a/src/arm/gnunet-service-arm_interceptor.c b/src/arm/gnunet-service-arm_interceptor.c
index c5a5fa56b..b4032a153 100644
--- a/src/arm/gnunet-service-arm_interceptor.c
+++ b/src/arm/gnunet-service-arm_interceptor.c
@@ -980,9 +980,9 @@ acceptConnection (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
980 struct ServiceListeningInfo *sli = cls; 980 struct ServiceListeningInfo *sli = cls;
981 struct ServiceListeningInfo *pos; 981 struct ServiceListeningInfo *pos;
982 struct ServiceListeningInfo *next; 982 struct ServiceListeningInfo *next;
983 int *lsocks; 983 SOCKTYPE *lsocks;
984 unsigned int ls; 984 unsigned int ls;
985 int use_lsocks; 985 int disable_lsocks;
986 986
987 sli->acceptTask = GNUNET_SCHEDULER_NO_TASK; 987 sli->acceptTask = GNUNET_SCHEDULER_NO_TASK;
988 if (0 != (GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason)) 988 if (0 != (GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason))
@@ -1025,11 +1025,19 @@ acceptConnection (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
1025 GNUNET_NETWORK_get_fd (sli->listeningSocket)); 1025 GNUNET_NETWORK_get_fd (sli->listeningSocket));
1026 GNUNET_free (sli->listeningSocket); /* deliberately no closing! */ 1026 GNUNET_free (sli->listeningSocket); /* deliberately no closing! */
1027 GNUNET_free (sli->service_addr); 1027 GNUNET_free (sli->service_addr);
1028#if WINDOWS
1029 GNUNET_array_append (lsocks, ls, INVALID_SOCKET);
1030#else
1028 GNUNET_array_append (lsocks, ls, -1); 1031 GNUNET_array_append (lsocks, ls, -1);
1032#endif
1029 start_service (NULL, sli->serviceName, lsocks); 1033 start_service (NULL, sli->serviceName, lsocks);
1030 ls = 0; 1034 ls = 0;
1031 while (lsocks[ls] != -1) 1035 while (lsocks[ls] != -1)
1036#if WINDOWS
1037 GNUNET_break (0 == closesocket (lsocks[ls++]));
1038#else
1032 GNUNET_break (0 == close (lsocks[ls++])); 1039 GNUNET_break (0 == close (lsocks[ls++]));
1040#endif
1033 GNUNET_array_grow (lsocks, ls, 0); 1041 GNUNET_array_grow (lsocks, ls, 0);
1034 GNUNET_free (sli->serviceName); 1042 GNUNET_free (sli->serviceName);
1035 GNUNET_free (sli); 1043 GNUNET_free (sli);