/* * loop through all available PTLs for one matching the source address * of the request. */ bool mca_btl_tcp_proc_accept(mca_btl_tcp_proc_t* btl_proc, struct sockaddr_in* addr, int sd) { size_t i; OPAL_THREAD_LOCK(&btl_proc->proc_lock); for(i=0; i<btl_proc->proc_endpoint_count; i++) { mca_btl_base_endpoint_t* btl_endpoint = btl_proc->proc_endpoints[i]; if(mca_btl_tcp_endpoint_accept(btl_endpoint, addr, sd)) { OPAL_THREAD_UNLOCK(&btl_proc->proc_lock); return true; } } OPAL_THREAD_UNLOCK(&btl_proc->proc_lock); return false; }
/* * loop through all available BTLs for one matching the source address * of the request. */ void mca_btl_tcp_proc_accept(mca_btl_tcp_proc_t* btl_proc, struct sockaddr* addr, int sd) { size_t i; OPAL_THREAD_LOCK(&btl_proc->proc_lock); for( i = 0; i < btl_proc->proc_endpoint_count; i++ ) { mca_btl_base_endpoint_t* btl_endpoint = btl_proc->proc_endpoints[i]; /* Check all conditions before going to try to accept the connection. */ if( btl_endpoint->endpoint_addr->addr_family != addr->sa_family ) { continue; } switch (addr->sa_family) { case AF_INET: if( memcmp( &btl_endpoint->endpoint_addr->addr_inet, &(((struct sockaddr_in*)addr)->sin_addr), sizeof(struct in_addr) ) ) { continue; } break; #if OPAL_ENABLE_IPV6 case AF_INET6: if( memcmp( &btl_endpoint->endpoint_addr->addr_inet, &(((struct sockaddr_in6*)addr)->sin6_addr), sizeof(struct in6_addr) ) ) { continue; } break; #endif default: ; } (void)mca_btl_tcp_endpoint_accept(btl_endpoint, addr, sd); OPAL_THREAD_UNLOCK(&btl_proc->proc_lock); return; } OPAL_THREAD_UNLOCK(&btl_proc->proc_lock); /* No further use of this socket. Close it */ CLOSE_THE_SOCKET(sd); }