diff options
author | Christian Grothoff <christian@grothoff.org> | 2011-12-06 17:58:40 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2011-12-06 17:58:40 +0000 |
commit | d234059375e77fe46c57e98751dc8491dff46e85 (patch) | |
tree | f2c73e373b9e7a01af71b2fa1ba0d5feb41881cf /src/arm | |
parent | afa1f268d5275e134566924a84e05ce631396cdb (diff) | |
download | gnunet-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.c | 2 | ||||
-rw-r--r-- | src/arm/gnunet-service-arm.c | 4 | ||||
-rw-r--r-- | src/arm/gnunet-service-arm.h | 2 | ||||
-rw-r--r-- | src/arm/gnunet-service-arm_interceptor.c | 12 |
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 | */ |
15 | static struct GNUNET_OS_Process * | 15 | static struct GNUNET_OS_Process * |
16 | do_start_process (const int *lsocks, const char *first_arg, ...) | 16 | do_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 | */ |
333 | static void | 333 | static void |
334 | start_process (struct ServiceList *sl, const int *lsocks) | 334 | start_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 | */ |
423 | int | 423 | int |
424 | start_service (struct GNUNET_SERVER_Client *client, const char *servicename, | 424 | start_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 | */ |
38 | int | 38 | int |
39 | start_service (struct GNUNET_SERVER_Client *client, const char *servicename, | 39 | start_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); |