Changeset 3802:958585351e28 in roaraudio


Ignore:
Timestamp:
05/07/10 23:15:25 (14 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

converted listen socket handling mostly to VIOs

Location:
roard
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • roard/include/roard.h

    r3800 r3802  
    146146#ifdef ROAR_SUPPORT_LISTEN 
    147147struct roard_listen { 
    148  int socket; 
     148 int used; 
     149 struct roar_vio_calls sock; 
    149150 int proto; 
    150151 union { 
  • roard/lib.c

    r3517 r3802  
    2828int lib_run_bg(char * cmd, int infh, int outfh, int errfh, int * closefh, int lenclose) { 
    2929#ifdef ROAR_HAVE_FORK 
    30  pid_t child = fork(); 
     30 pid_t child; 
    3131 int fh[3] = {-1, -1, -1}; 
    3232 int i; 
     33 
     34 ROAR_WARN("lib_run_bg(cmd='%s', ...): This function should never be called. Contact devels."); 
     35 
     36 child = fork(); 
    3337 
    3438 if ( child == -1 ) { 
     
    5458#ifdef ROAR_SUPPORT_LISTEN 
    5559 for (i = 0; i < ROAR_MAX_LISTEN_SOCKETS; i++) 
    56   if ( g_listen[i].socket != -1 ) 
    57    close(g_listen[i].socket); // listen socket. 
     60  if ( g_listen[i].used ) 
     61   roar_vio_close(&(g_listen[i].sock)); // listen socket. 
    5862#endif 
    5963 
  • roard/loop.c

    r3517 r3802  
    6666  have_listen = 0; 
    6767  for (i = 0; i < ROAR_MAX_LISTEN_SOCKETS; i++) { 
    68    if ( g_listen[i].socket != -1 ) { 
     68   if ( g_listen[i].used ) { 
    6969    have_listen = 1; 
    7070    break; 
  • roard/network.c

    r3713 r3802  
    3737 
    3838int net_check_listen  (void) { 
    39 #ifdef _CAN_OPERATE 
    40  int r; 
    41  fd_set sl; 
    42  struct timeval tv; 
     39 struct roar_vio_selecttv rtv; 
     40 struct roar_vio_select   sv[ROAR_MAX_LISTEN_SOCKETS]; 
     41 size_t num = 0; 
     42 ssize_t ret; 
    4343 int i; 
    44  int max_fh = -1; 
    45  
    46  FD_ZERO(&sl); 
    4744 
    4845 for (i = 0; i < ROAR_MAX_LISTEN_SOCKETS; i++) { 
    49   if ( g_listen[i].socket != -1 ) { 
    50    if ( g_listen[i].socket > max_fh ) 
    51     max_fh = g_listen[i].socket; 
    52  
    53    FD_SET(g_listen[i].socket, &sl); 
     46  if ( g_listen[i].used ) { 
     47   ROAR_VIO_SELECT_SETVIO(&(sv[num]), &(g_listen[i].sock), ROAR_VIO_SELECT_READ); 
     48   sv[num].ud.si = i; 
     49   num++; 
    5450  } 
    5551 } 
    5652 
    57  if ( max_fh == -1 ) 
     53 if ( num == 0 ) 
    5854  return 0; 
    5955 
    60  tv.tv_sec  = 0; 
    61  tv.tv_usec = 1; 
     56 rtv.sec  = 0; 
     57 rtv.nsec = 1000; 
    6258 
    63  if ((r = select(max_fh + 1, &sl, NULL, NULL, &tv)) > 0) { 
    64   ROAR_DBG("net_check_listen(void): We have a connection!"); 
    65   for (i = 0; i < ROAR_MAX_LISTEN_SOCKETS; i++) { 
    66    if ( g_listen[i].socket != -1 ) { 
    67     if ( FD_ISSET(g_listen[i].socket, &sl) ) { 
    68      if ( net_get_new_client(&(g_listen[i])) == -1 ) 
    69       return -1; 
    70     } 
     59 if ( (ret = roar_vio_select(sv, num, &rtv, NULL)) > 0 ) { 
     60  for (i = 0; i < num; i++) { 
     61   if ( sv[i].eventsa & ROAR_VIO_SELECT_READ ) { 
     62    if ( net_get_new_client(&(g_listen[sv[i].ud.si])) == -1 ) 
     63     return -1; 
    7164   } 
    7265  } 
    7366 } 
    7467 
    75  return r; 
    76 #else 
    77  return -1; 
    78 #endif 
     68 return ret; 
    7969} 
    8070 
    81 #ifdef _CAN_OPERATE 
    8271int net_get_new_client (struct roard_listen * lsock) { 
    8372 int fh; 
    8473 int client; 
     74 int socket; 
    8575 struct roar_client * c; 
    8676 struct roar_vio_calls    vio; 
     
    8878 socklen_t                addrlen = sizeof(addr); 
    8979 
    90  fh = accept(lsock->socket, (struct sockaddr*)&addr, &addrlen); 
     80 roar_vio_ctl(&(lsock->sock), ROAR_VIO_CTL_GET_FH, &socket); 
     81 
     82 fh = accept(socket, (struct sockaddr*)&addr, &addrlen); 
    9183 
    9284 ROAR_DBG("net_get_new_client(void): fh = %i", fh); 
     
    180172 return 0; 
    181173} 
    182 #endif 
    183174 
    184175#endif 
  • roard/req.c

    r3764 r3802  
    351351  } 
    352352 
    353   lsock->socket = fh; 
     353  roar_vio_open_fh_socket(&(lsock->sock), fh); 
     354  lsock->used   = 1; 
    354355  lsock->proto  = d[2]; 
    355356 } else { 
  • roard/roard.c

    r3760 r3802  
    307307 
    308308 for (i = 0; i < ROAR_MAX_LISTEN_SOCKETS; i++) { 
    309   g_listen[i].socket = -1; 
    310309  g_listen[i].proto  = ROAR_PROTO_ROARAUDIO; 
    311310  server[i]          = NULL; 
     
    322321 
    323322 for (i = 0; i < ROAR_MAX_LISTEN_SOCKETS; i++) { 
    324   if ( g_listen[i].socket == -1 ) { 
     323  if ( ! g_listen[i].used ) { 
    325324   server[i] = NULL; 
    326325   *sock = &(g_listen[i]); 
     
    352351 if ( *addr != 0 ) { 
    353352  for (i = 0; i < ROAR_MAX_LISTEN_SOCKETS; i++) { 
    354    if ( g_listen[i].socket == -1 ) { 
     353   if ( ! g_listen[i].used ) { 
    355354    sockid = i; 
    356355    break; 
     
    365364  ROAR_DBG("add_listen(*): proto=0x%.4x", proto); 
    366365 
    367   if ( (g_listen[sockid].socket = roar_socket_listen(sock_type, addr, port)) == -1 ) { 
     366  if ( roar_vio_open_socket_listen(&(g_listen[sockid].sock), sock_type, addr, port) == -1 ) { 
    368367#ifdef ROAR_HAVE_UNIX 
    369368   if ( *addr == '/' ) { 
     
    378377    } else { 
    379378     unlink(addr); 
    380      if ( (g_listen[sockid].socket = roar_socket_listen(sock_type, addr, port)) == -1 ) { 
     379     if ( roar_vio_open_socket_listen(&(g_listen[sockid].sock), sock_type, addr, port) == -1 ) { 
    381380      ROAR_ERR("Can not open listen socket: %s", strerror(errno)); 
    382381      return 1; 
     
    455454 } 
    456455 
    457  server[sockid] = addr; 
     456 g_listen[sockid].used = 1; 
     457 server[sockid]        = addr; 
     458 
    458459 return 0; 
    459460} 
     
    18591860#ifdef ROAR_SUPPORT_LISTEN 
    18601861 for (i = 0; i < ROAR_MAX_LISTEN_SOCKETS; i++) { 
    1861   if ( g_listen[i].socket != -1 ) { 
    1862 #ifdef ROAR_HAVE_IO_POSIX 
    1863    close(g_listen[i].socket); 
    1864 #endif // #else is useless because we are in void context. 
    1865  
    1866    g_listen[i].socket = -1; 
     1862  if ( g_listen[i].used  ) { 
     1863   roar_vio_close(&(g_listen[i].sock)); 
     1864 
     1865   g_listen[i].used = 0; 
    18671866 
    18681867#ifdef ROAR_HAVE_UNIX 
Note: See TracChangeset for help on using the changeset viewer.