static foreign_t pl_accept(term_t Master, term_t Slave, term_t Peer) { int master, slave; struct sockaddr_in addr; socklen_t addrlen = sizeof(addr); if ( !tcp_get_socket(Master, &master) ) return FALSE; if ( (slave = nbio_accept(master, (struct sockaddr*)&addr, &addrlen)) < 0 ) return FALSE; /* TBD: close on failure */ if ( nbio_unify_ip4(Peer, ntohl(addr.sin_addr.s_addr)) && tcp_unify_socket(Slave, slave) ) return TRUE; return FALSE; }
static foreign_t pl_tipc_accept(term_t Master, term_t Slave, term_t Peer) { int master, slave; struct sockaddr_tipc addr; socklen_t addrlen = sizeof(addr); memset(&addr, 0, sizeof(addr)); if ( !tipc_get_socket(Master, &master) ) return FALSE; if ( (slave = nbio_accept(master, (struct sockaddr*)&addr, &addrlen)) < 0 ) return FALSE; /* TBD: close on failure */ if ( unify_tipc_address(Peer, &addr) && tipc_unify_socket(Slave, slave) ) return TRUE; return FALSE; }