Changeset 5408:c6d31c2e4a51 in roaraudio for libroar/vio_stream.c
- Timestamp:
- 02/13/12 22:17:17 (12 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libroar/vio_stream.c
r5381 r5408 183 183 int socks[2]; // for socketpair() 184 184 #endif 185 struct roar_sockname sockname; 185 186 186 187 // make valgrind happy … … 190 191 #endif 191 192 193 ROAR_DBG("_roar_simple_new_stream_obj(con=%p, s=%p, rate=%i, channels=%i, bits=%i, codec=%i, dir=%i, mixer=%i) = ?", con, s, (int)rate, (int)channels, (int)bits, (int)codec, dir, mixer); 194 192 195 if ( config != NULL ) { 193 196 if ( config->workaround.workarounds & ROAR_LIBROAR_CONFIG_WAS_USE_EXECED ) { … … 196 199 } 197 200 198 #ifdef ROAR_HAVE_BSDSOCKETS 201 ROAR_DBG("_roar_simple_new_stream_obj(con=%p, s=%p, rate=%i, channels=%i, bits=%i, codec=%i, dir=%i, mixer=%i) = ?", con, s, (int)rate, (int)channels, (int)bits, (int)codec, dir, mixer); 202 199 203 roar_libroar_nowarn(); 200 if ( getsockname(roar_get_connection_fh(con), (struct sockaddr *)&socket_addr, &len) == -1 ) {204 if ( roar_vio_ctl(roar_get_connection_vio2(con), ROAR_VIO_CTL_GET_SOCKNAME, &sockname) == -1 ) { 201 205 roar_libroar_warn(); 202 return -1; 206 #ifdef ROAR_OS_OPENBSD 207 sockname.type = ROAR_SOCKET_TYPE_UNIX; 208 #else 209 ROAR_DBG("_roar_simple_new_stream_obj(con=%p, s=%p, rate=%i, channels=%i, bits=%i, codec=%i, dir=%i, mixer=%i) = -1", con, s, (int)rate, (int)channels, (int)bits, (int)codec, dir, mixer); 210 211 return -1; 212 #endif 203 213 } 204 214 roar_libroar_warn(); 205 #else 206 return -1; 207 #endif 208 209 if ( len == 0 ) { 210 #ifdef ROAR_OS_OPENBSD 211 ROAR_WARN("roar_simple_new_stream_obj(*): Unknown address family: guess AF_UNIX because OS is OpenBSD"); 212 ((struct sockaddr*)&socket_addr)->sa_family = AF_UNIX; 213 #else 214 return -1; 215 #endif 216 } 217 218 switch (((struct sockaddr*)&socket_addr)->sa_family) { 219 #ifdef ROAR_HAVE_UNIX 220 case AF_UNIX: type = ROAR_SOCKET_TYPE_UNIX; break; 221 #endif 222 #ifdef ROAR_HAVE_IPV4 223 case AF_INET: type = ROAR_SOCKET_TYPE_INET; break; 224 #endif 225 #ifdef ROAR_HAVE_LIBDNET 226 case AF_DECnet: type = ROAR_SOCKET_TYPE_DECNET; break; 227 #endif 228 default: 229 return -1; 230 break; 231 } 232 233 if ( type == ROAR_SOCKET_TYPE_DECNET ) { 215 216 ROAR_DBG("_roar_simple_new_stream_obj(con=%p, s=%p, rate=%i, channels=%i, bits=%i, codec=%i, dir=%i, mixer=%i) = ?", con, s, (int)rate, (int)channels, (int)bits, (int)codec, dir, mixer); 217 218 if ( sockname.type == ROAR_SOCKET_TYPE_DECNET ) { 234 219 if ( roar_socket_get_local_nodename() ) { 235 220 snprintf(file, 24, "%s::roar$TMP%04x%02x", roar_socket_get_local_nodename(), getpid(), count++); … … 243 228 } 244 229 245 if ( type != ROAR_SOCKET_TYPE_UNIX ) {246 if ( (listen = roar_socket_listen( type, file, port)) == -1 ) {230 if ( sockname.type != ROAR_SOCKET_TYPE_UNIX ) { 231 if ( (listen = roar_socket_listen(sockname.type, file, port)) == -1 ) { 247 232 return -1; 248 233 } 249 234 } 250 235 251 if ( type == ROAR_SOCKET_TYPE_INET ) {236 if ( sockname.type == ROAR_SOCKET_TYPE_INET ) { 252 237 #ifdef ROAR_HAVE_IPV4 253 238 setsockopt(listen, SOL_SOCKET, SO_REUSEADDR, (void*)&opt, sizeof(int)); … … 262 247 return -1; 263 248 #endif 264 } else if ( type == ROAR_SOCKET_TYPE_DECNET ) {249 } else if ( sockname.type == ROAR_SOCKET_TYPE_DECNET ) { 265 250 #ifdef ROAR_HAVE_LIBDNET 266 251 setsockopt(listen, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(int)); … … 278 263 } 279 264 280 if ( type != ROAR_SOCKET_TYPE_UNIX ) {265 if ( sockname.type != ROAR_SOCKET_TYPE_UNIX ) { 281 266 #ifdef ROAR_HAVE_SELECT 282 if ( roar_stream_connect_to_ask(con, s, type, file, port) != -1 ) {267 if ( roar_stream_connect_to_ask(con, s, sockname.type, file, port) != -1 ) { 283 268 284 269 FD_ZERO(&fds); … … 354 339 return -1; 355 340 #endif 356 } else { // this is type == ROAR_SOCKET_TYPE_UNIX341 } else { // this is sockname.type == ROAR_SOCKET_TYPE_UNIX 357 342 #ifdef ROAR_HAVE_UNIX 358 343 if ( socketpair(AF_UNIX, SOCK_STREAM, 0, socks) == -1 ) { … … 388 373 s->fh = fh; 389 374 375 ROAR_DBG("_roar_simple_new_stream_obj(con=%p, s=%p, rate=%i, channels=%i, bits=%i, codec=%i, dir=%i, mixer=%i) = %i", con, s, (int)rate, (int)channels, (int)bits, (int)codec, dir, mixer, fh); 390 376 return fh; 391 377 }
Note: See TracChangeset
for help on using the changeset viewer.