while (NULL != serverAddr[i])
{
seen = 0;
- for (k=0;k<i-1;k++)
- if ( (socklen[k] == socklen[i]) &&
- (0 == memcmp (serverAddr[k], serverAddr[i], socklen[i])) )
- {
- seen = 1;
- break;
- }
+ if (i > 0)
+ for (k=0;k<i-1;k++)
+ if ( (socklen[k] == socklen[i]) &&
+ (0 == memcmp (serverAddr[k], serverAddr[i], socklen[i])) )
+ {
+ seen = 1;
+ break;
+ }
if (0 != seen)
{
/* duplicate address, skip */
*/
struct GNUNET_NETWORK_Handle **lsocks;
+ /**
+ * Task ID of the shutdown task.
+ */
+ GNUNET_SCHEDULER_TaskIdentifier shutdown_task;
+
/**
* Idle timeout for server.
*/
struct GNUNET_SERVICE_Context *service = cls;
struct GNUNET_SERVER_Handle *server = service->server;
+ service->shutdown_task = GNUNET_SCHEDULER_NO_TASK;
if (0 != (service->options & GNUNET_SERVICE_OPTION_SOFT_SHUTDOWN))
GNUNET_SERVER_stop_listening (server);
else
{
/* install a task that will kill the server
* process if the scheduler ever gets a shutdown signal */
- GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &shutdown_task,
- sctx);
+ sctx->shutdown_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &shutdown_task,
+ sctx);
}
sctx->my_handlers = GNUNET_malloc (sizeof (defhandlers));
memcpy (sctx->my_handlers, defhandlers, sizeof (defhandlers));
{
unsigned int i;
+ if (GNUNET_SCHEDULER_NO_TASK != sctx->shutdown_task)
+ {
+ GNUNET_SCHEDULER_cancel (sctx->shutdown_task);
+ sctx->shutdown_task = GNUNET_SCHEDULER_NO_TASK;
+ }
if (NULL != sctx->server)
GNUNET_SERVER_destroy (sctx->server);
GNUNET_free_non_null (sctx->my_handlers);
#include "gnunet_time_lib.h"
-#define VERBOSE GNUNET_NO
+#define VERBOSE GNUNET_YES
#define PORT 12435
GNUNET_SERVICE_stop (sctx);
sctx = NULL;
}
+ else
+ {
+ GNUNET_SCHEDULER_shutdown ();
+ }
}
if (size < sizeof (struct GNUNET_MessageHeader))
{
/* timeout */
+ GNUNET_break (0);
GNUNET_SCHEDULER_add_now (&do_stop, NULL);
ok = 1;
return 0;
NULL);
ret += check ();
ret += check ();
-
// FIXME
#ifndef MINGW
s = GNUNET_NETWORK_socket_create (PF_INET6, SOCK_STREAM, 0);
ret += check6 ();
}
ret += check_start_stop ();
-
return ret;
}