aboutsummaryrefslogtreecommitdiff
path: root/src/arm/gnunet-service-arm.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2015-07-13 14:53:30 +0000
committerChristian Grothoff <christian@grothoff.org>2015-07-13 14:53:30 +0000
commit3104aa430ae360599dd54369a8cb1fd61f07894c (patch)
tree6b8d87ddc782d50e51d1107bb13597218b5e9a1f /src/arm/gnunet-service-arm.c
parent13a3089d561ed7332da25a7c461cdcc633c6b855 (diff)
downloadgnunet-3104aa430ae360599dd54369a8cb1fd61f07894c.tar.gz
gnunet-3104aa430ae360599dd54369a8cb1fd61f07894c.zip
automatically clean up left-over Unix domain socket files when trying to bind (fixes #3723)
Diffstat (limited to 'src/arm/gnunet-service-arm.c')
-rw-r--r--src/arm/gnunet-service-arm.c25
1 files changed, 15 insertions, 10 deletions
diff --git a/src/arm/gnunet-service-arm.c b/src/arm/gnunet-service-arm.c
index 0dffafeeb..a411546d7 100644
--- a/src/arm/gnunet-service-arm.c
+++ b/src/arm/gnunet-service-arm.c
@@ -603,7 +603,8 @@ accept_connection (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
603 * @param sl service entry for the service in question 603 * @param sl service entry for the service in question
604 */ 604 */
605static void 605static void
606create_listen_socket (struct sockaddr *sa, socklen_t addr_len, 606create_listen_socket (struct sockaddr *sa,
607 socklen_t addr_len,
607 struct ServiceList *sl) 608 struct ServiceList *sl)
608{ 609{
609 static int on = 1; 610 static int on = 1;
@@ -652,14 +653,18 @@ create_listen_socket (struct sockaddr *sa, socklen_t addr_len,
652 GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 653 GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
653 "setsockopt"); 654 "setsockopt");
654#endif 655#endif
655 656#ifndef WINDOWS
657 if (AF_UNIX == sa->sa_family)
658 GNUNET_NETWORK_unix_precheck ((struct sockaddr_un *) sa);
659#endif
656 if (GNUNET_OK != 660 if (GNUNET_OK !=
657 GNUNET_NETWORK_socket_bind (sock, (const struct sockaddr *) sa, addr_len)) 661 GNUNET_NETWORK_socket_bind (sock, (const struct sockaddr *) sa, addr_len))
658 { 662 {
659 GNUNET_log (GNUNET_ERROR_TYPE_WARNING, 663 GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
660 _ 664 _("Unable to bind listening socket for service `%s' to address `%s': %s\n"),
661 ("Unable to bind listening socket for service `%s' to address `%s': %s\n"), 665 sl->name,
662 sl->name, GNUNET_a2s (sa, addr_len), STRERROR (errno)); 666 GNUNET_a2s (sa, addr_len),
667 STRERROR (errno));
663 GNUNET_break (GNUNET_OK == GNUNET_NETWORK_socket_close (sock)); 668 GNUNET_break (GNUNET_OK == GNUNET_NETWORK_socket_close (sock));
664 GNUNET_free (sa); 669 GNUNET_free (sa);
665 return; 670 return;
@@ -1394,11 +1399,11 @@ setup_service (void *cls,
1394 "FORCESTART")) 1399 "FORCESTART"))
1395 { 1400 {
1396 sl->force_start = GNUNET_YES; 1401 sl->force_start = GNUNET_YES;
1397 /* FIXME: we might like the pre-binding even for 1402 if (GNUNET_YES ==
1398 _certain_ services that have force_start set, 1403 GNUNET_CONFIGURATION_get_value_yesno (cfg,
1399 otherwise interdependencies may again force 1404 section,
1400 client's to retry connections during startup. */ 1405 "NOARMBIND"))
1401 return; 1406 return;
1402 } 1407 }
1403 else 1408 else
1404 { 1409 {