Changeset 68:797b3512e1d9 in roaraudio


Ignore:
Timestamp:
07/12/08 14:19:10 (16 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

added basic demon support, a option to not listen on any sockets and support to create clients out of given FHs

Location:
roard
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • roard/loop.c

    r52 r68  
    2525  ROAR_DBG("main_loop(*): looping..."); 
    2626 
    27   ROAR_DBG("main_loop(*): check for new clients..."); 
    28   net_check_listen(); 
     27  if ( g_listen_socket != -1 ) { 
     28   ROAR_DBG("main_loop(*): check for new clients..."); 
     29   net_check_listen(); 
     30  } 
    2931 
    3032  ROAR_DBG("main_loop(*): check for new data..."); 
  • roard/roard.c

    r64 r68  
    88 printf("Usage: roard [OPTIONS]...\n\n"); 
    99 
    10  printf("Audio Options:\n\n"); 
     10 printf("Misc Options:\n\n"); 
     11 printf( 
     12        " --demon               - bring the server into background after init\n" 
     13       ); 
     14 
     15 printf("\nAudio Options:\n\n"); 
    1116 printf( 
    1217        " -R  --rate   RATE     - Set server rate\n" 
     
    3641        " -G  GROUP             - Sets the group for the UNIX Domain Socket, (default: audio)\n" 
    3742        "                         You need the permittions to change the GID\n" 
     43        " --no-listen           - Do not listen for new clients (only usefull for relaing)\n" 
     44        " --client-fh           - Communite with a client over this handle\n" 
     45        "                         (only usefull for relaing)\n" 
    3846       ); 
    3947// printf("\n Options:\n\n"); 
     
    4654 char user_sock[80] = {0}; 
    4755 struct roar_audio_info sa; 
     56 int    demon = 0; 
    4857 char * driver = NULL; 
    4958 char * device = NULL; 
     
    109118   return 0; 
    110119 
     120  } else if ( strcmp(k, "--demon") == 0 ) { 
     121   demon = 1; 
     122 
    111123  } else if ( strcmp(k, "-R") == 0 || strcmp(k, "--rate") == 0 ) { 
    112124   sa.rate = atoi(argv[++i]); 
     
    144156  } else if ( strcmp(k, "-p") == 0 || strcmp(k, "--port") == 0 ) { 
    145157   port = atoi(argv[++i]); 
    146   } else if ( strcmp(k, "-b") == 0 || strcmp(k, "--bind") == 0 ) { 
     158  } else if ( strcmp(k, "-b") == 0 || strcmp(k, "--bind") == 0 || strcmp(k, "-s") == 0 || strcmp(k, "--sock") == 0 ) { 
    147159   server = argv[++i]; 
    148160  } else if ( strcmp(k, "-t") == 0 ) { 
     
    153165   sock_grp = argv[++i]; 
    154166 
     167  } else if ( strcmp(k, "--no-listen") == 0 ) { 
     168   *server = 0; 
     169  } else if ( strcmp(k, "--client-fh") == 0 ) { 
     170   if ( clients_set_fh(clients_new(), atoi(argv[++i])) == -1 ) { 
     171    ROAR_ERR("main(*): Can not set client's fh"); 
     172    return 1; 
     173   } 
     174 
    155175  } else { 
    156176   usage(); 
     
    162182 ROAR_DBG("Server config: rate=%i, bits=%i, chans=%i", sa.rate, sa.bits, sa.channels); 
    163183 
    164  if ( (g_listen_socket = roar_socket_listen(ROAR_SOCKET_TYPE_UNKNOWN, server, port)) == -1 ) { 
    165   ROAR_ERR("Can not open listen socket!"); 
    166   return 1; 
    167  } 
    168  
    169  if ( *server == '/' ) { 
    170   if ( (grp = getgrnam(sock_grp)) == NULL ) { 
    171    ROAR_ERR("Can not get GID for group %s: %s", sock_grp, strerror(errno)); 
    172   } else { 
    173    chown(server, -1, grp->gr_gid); 
    174    if ( getuid() == 0 ) 
    175     chmod(server, S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP); 
     184 if ( *server != 0 ) { 
     185  if ( (g_listen_socket = roar_socket_listen(ROAR_SOCKET_TYPE_UNKNOWN, server, port)) == -1 ) { 
     186   ROAR_ERR("Can not open listen socket!"); 
     187   return 1; 
     188  } 
     189 
     190  if ( *server == '/' ) { 
     191   if ( (grp = getgrnam(sock_grp)) == NULL ) { 
     192    ROAR_ERR("Can not get GID for group %s: %s", sock_grp, strerror(errno)); 
     193   } else { 
     194    chown(server, -1, grp->gr_gid); 
     195    if ( getuid() == 0 ) 
     196     chmod(server, S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP); 
     197   } 
    176198  } 
    177199 } 
     
    206228 
    207229 strcpy(self->name, "RoarAudio demon internal"); 
     230 
     231 if ( demon ) { 
     232  close(ROAR_STDIN ); 
     233  close(ROAR_STDOUT); 
     234  close(ROAR_STDERR); 
     235  if ( fork() ) 
     236   _exit(0); 
     237 } 
     238 
    208239 // start main loop... 
    209240 main_loop(drvid, drvinst, &sa); 
Note: See TracChangeset for help on using the changeset viewer.