static int get_nameinfo(lcb_connection_t conn, struct nameinfo_common *nistrs) { struct sockaddr_storage sa_local; struct sockaddr_storage sa_remote; int n_salocal, n_saremote; struct lcb_nameinfo_st ni; int rv; n_salocal = sizeof(sa_local); n_saremote = sizeof(sa_remote); ni.local.name = (struct sockaddr *)&sa_local; ni.local.len = &n_salocal; ni.remote.name = (struct sockaddr *)&sa_remote; ni.remote.len = &n_saremote; if (conn->instance->io->version == 1) { rv = conn->instance->io->v.v1.get_nameinfo(conn->instance->io, conn->sockptr, &ni); if (ni.local.len == 0 || ni.remote.len == 0 || rv < 0) { return 0; } } else { socklen_t sl_tmp = sizeof(sa_local); rv = getsockname(conn->sockfd, ni.local.name, &sl_tmp); n_salocal = sl_tmp; if (rv < 0) { return 0; } rv = getpeername(conn->sockfd, ni.remote.name, &sl_tmp); n_saremote = sl_tmp; if (rv < 0) { return 0; } } if (!saddr_to_string(ni.remote.name, *ni.remote.len, nistrs->remote, sizeof(nistrs->remote))) { return 0; } if (!saddr_to_string(ni.local.name, *ni.local.len, nistrs->local, sizeof(nistrs->local))) { return 0; } return 1; }
int lcbio_get_nameinfo(lcbio_SOCKET *sock, struct lcbio_NAMEINFO *nistrs) { lcbio_CONNINFO *info = sock->info; if (!info) { return 0; } if (!info->naddr) { return 0; } if (!saddr_to_string((struct sockaddr*)&info->sa_remote, info->naddr, nistrs->remote, sizeof(nistrs->remote))) { return 0; } if (!saddr_to_string((struct sockaddr*)&info->sa_local, info->naddr, nistrs->local, sizeof(nistrs->local))) { return 0; } return 1; }