X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fshairplay.c;h=09210bf3d226d825b761b5cd36189766be34e406;hb=2c4250f147fa35b9adf48ea33067249f8d9cea25;hp=6ee23bad4b4ca81096d61219fab081d9edc01393;hpb=61c2f5d5fa6f775ba9bee01788962cdae41c0b6c;p=deb_shairplay.git diff --git a/src/shairplay.c b/src/shairplay.c index 6ee23ba..09210bf 100644 --- a/src/shairplay.c +++ b/src/shairplay.c @@ -6,7 +6,7 @@ #include #ifdef WIN32 -#include +# include #endif #include @@ -37,6 +37,36 @@ typedef struct { } shairplay_session_t; +static int running; + +#ifndef WIN32 + +#include +static void +signal_handler(int sig) +{ + switch (sig) { + case SIGINT: + case SIGTERM: + running = 0; + break; + } +} +static void +init_signals(void) +{ + struct sigaction sigact; + + sigact.sa_handler = signal_handler; + sigemptyset(&sigact.sa_mask); + sigact.sa_flags = 0; + sigaction(SIGINT, &sigact, NULL); + sigaction(SIGTERM, &sigact, NULL); +} + +#endif + + static ao_device * audio_open_device(shairplay_options_t *opt, int bits, int channels, int samplerate) { @@ -235,6 +265,10 @@ main(int argc, char *argv[]) int error; +#ifndef WIN32 + init_signals(); +#endif + memset(&options, 0, sizeof(options)); if (parse_options(&options, argc, argv)) { return 0; @@ -283,11 +317,14 @@ main(int argc, char *argv[]) dnssd_register_raop(dnssd, options.apname, options.port, hwaddr, sizeof(hwaddr), 0); dnssd_register_airplay(dnssd, options.apname, 1234, hwaddr, sizeof(hwaddr)); + running = 1; + while (running) { #ifndef WIN32 - sleep(100); + sleep(1); #else - Sleep(100*1000); + Sleep(1000); #endif + } dnssd_unregister_raop(dnssd); dnssd_destroy(dnssd);