Changeset 3802:958585351e28 in roaraudio
- Timestamp:
- 05/07/10 23:15:25 (14 years ago)
- Branch:
- default
- Phase:
- public
- Location:
- roard
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
roard/include/roard.h
r3800 r3802 146 146 #ifdef ROAR_SUPPORT_LISTEN 147 147 struct roard_listen { 148 int socket; 148 int used; 149 struct roar_vio_calls sock; 149 150 int proto; 150 151 union { -
roard/lib.c
r3517 r3802 28 28 int lib_run_bg(char * cmd, int infh, int outfh, int errfh, int * closefh, int lenclose) { 29 29 #ifdef ROAR_HAVE_FORK 30 pid_t child = fork();30 pid_t child; 31 31 int fh[3] = {-1, -1, -1}; 32 32 int i; 33 34 ROAR_WARN("lib_run_bg(cmd='%s', ...): This function should never be called. Contact devels."); 35 36 child = fork(); 33 37 34 38 if ( child == -1 ) { … … 54 58 #ifdef ROAR_SUPPORT_LISTEN 55 59 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. 58 62 #endif 59 63 -
roard/loop.c
r3517 r3802 66 66 have_listen = 0; 67 67 for (i = 0; i < ROAR_MAX_LISTEN_SOCKETS; i++) { 68 if ( g_listen[i]. socket != -1) {68 if ( g_listen[i].used ) { 69 69 have_listen = 1; 70 70 break; -
roard/network.c
r3713 r3802 37 37 38 38 int net_check_listen (void) { 39 #ifdef _CAN_OPERATE 40 int r;41 fd_set sl;42 s truct 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; 43 43 int i; 44 int max_fh = -1;45 46 FD_ZERO(&sl);47 44 48 45 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++; 54 50 } 55 51 } 56 52 57 if ( max_fh == -1)53 if ( num == 0 ) 58 54 return 0; 59 55 60 tv.tv_sec = 0;61 tv.tv_usec = 1;56 rtv.sec = 0; 57 rtv.nsec = 1000; 62 58 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; 71 64 } 72 65 } 73 66 } 74 67 75 return r; 76 #else 77 return -1; 78 #endif 68 return ret; 79 69 } 80 70 81 #ifdef _CAN_OPERATE82 71 int net_get_new_client (struct roard_listen * lsock) { 83 72 int fh; 84 73 int client; 74 int socket; 85 75 struct roar_client * c; 86 76 struct roar_vio_calls vio; … … 88 78 socklen_t addrlen = sizeof(addr); 89 79 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); 91 83 92 84 ROAR_DBG("net_get_new_client(void): fh = %i", fh); … … 180 172 return 0; 181 173 } 182 #endif183 174 184 175 #endif -
roard/req.c
r3764 r3802 351 351 } 352 352 353 lsock->socket = fh; 353 roar_vio_open_fh_socket(&(lsock->sock), fh); 354 lsock->used = 1; 354 355 lsock->proto = d[2]; 355 356 } else { -
roard/roard.c
r3760 r3802 307 307 308 308 for (i = 0; i < ROAR_MAX_LISTEN_SOCKETS; i++) { 309 g_listen[i].socket = -1;310 309 g_listen[i].proto = ROAR_PROTO_ROARAUDIO; 311 310 server[i] = NULL; … … 322 321 323 322 for (i = 0; i < ROAR_MAX_LISTEN_SOCKETS; i++) { 324 if ( g_listen[i].socket == -1) {323 if ( ! g_listen[i].used ) { 325 324 server[i] = NULL; 326 325 *sock = &(g_listen[i]); … … 352 351 if ( *addr != 0 ) { 353 352 for (i = 0; i < ROAR_MAX_LISTEN_SOCKETS; i++) { 354 if ( g_listen[i].socket == -1) {353 if ( ! g_listen[i].used ) { 355 354 sockid = i; 356 355 break; … … 365 364 ROAR_DBG("add_listen(*): proto=0x%.4x", proto); 366 365 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 ) { 368 367 #ifdef ROAR_HAVE_UNIX 369 368 if ( *addr == '/' ) { … … 378 377 } else { 379 378 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 ) { 381 380 ROAR_ERR("Can not open listen socket: %s", strerror(errno)); 382 381 return 1; … … 455 454 } 456 455 457 server[sockid] = addr; 456 g_listen[sockid].used = 1; 457 server[sockid] = addr; 458 458 459 return 0; 459 460 } … … 1859 1860 #ifdef ROAR_SUPPORT_LISTEN 1860 1861 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; 1867 1866 1868 1867 #ifdef ROAR_HAVE_UNIX
Note: See TracChangeset
for help on using the changeset viewer.