Ejemplo n.º 1
0
kaddress_t* knet_channel_ref_get_peer_address(kchannel_ref_t* channel_ref) {
    verify(channel_ref);
    if (channel_ref->ref_info->peer_address) {
        return channel_ref->ref_info->peer_address;
    }
    channel_ref->ref_info->peer_address = knet_address_create();
    socket_getpeername(channel_ref, channel_ref->ref_info->peer_address);
    return channel_ref->ref_info->peer_address;
}
Ejemplo n.º 2
0
/*
** addr, port, err = socket.getpeername(fd)
*/
static int lsocket_getpeername(lua_State *L) 
{
	int fd = luaL_checkinteger(L, 1);
	char addr[INET6_ADDRSTRLEN];
	int port = 0;
	int err = socket_getpeername(fd, addr, &port);
	if (err == 0) {
		lua_pushstring(L, addr);
		lua_pushinteger(L, port);
	} else {
		lua_pushnil(L);
		lua_pushnil(L);
	}
	lua_pushinteger(L, err);
	return 3;
}
Ejemplo n.º 3
0
int
ksocket_getpeername(ksocket_t ks, struct sockaddr *addr, socklen_t *addrlen,
    struct cred *cr)
{
	struct sonode *so;

	/* All Solaris components should pass a cred for this operation. */
	ASSERT(cr != NULL);

	if (!KSOCKET_VALID(ks))
		return (ENOTSOCK);

	so = KSTOSO(ks);

	if (addrlen == NULL || (addr == NULL && *addrlen != 0))
		return (EFAULT);

	return (socket_getpeername(so, addr, addrlen, B_FALSE, cr));
}
Ejemplo n.º 4
0
int
ksocket_accept(ksocket_t ks, struct sockaddr *addr,
    socklen_t *addrlenp, ksocket_t *nks, struct cred *cr)
{
	int error;
	struct sonode *nso = NULL;

	/* All Solaris components should pass a cred for this operation. */
	ASSERT(cr != NULL);

	*nks = NULL;

	if (!KSOCKET_VALID(ks))
		return (ENOTSOCK);

	if (addr != NULL && addrlenp == NULL)
		return (EFAULT);

	error = socket_accept(KSTOSO(ks), KSOCKET_FMODE(ks), cr, &nso);
	if (error != 0)
		return (error);

	ASSERT(nso != NULL);

	nso->so_mode |= SM_KERNEL;

	if (addr != NULL && addrlenp != NULL) {
		error = socket_getpeername(nso, addr, addrlenp, B_TRUE, cr);
		if (error != 0) {
			(void) socket_close(nso, 0, cr);
			socket_destroy(nso);
			return ((error == ENOTCONN) ? ECONNABORTED : error);
		}
	}

	*nks = SOTOKS(nso);

	return (error);
}