コード例 #1
0
int main(AVAHI_GCC_UNUSED int argc, AVAHI_GCC_UNUSED char *argv[]) {
    sw_ipv4_address a;
    char t[256];
    uint8_t a1, a2, a3, a4;

    ASSERT_SW_OKAY(sw_ipv4_address_init_from_name(&a, "heise.de"));
    ASSERT_NOT_NULL(sw_ipv4_address_name(a, t, sizeof(t)));
    printf("%s\n", t);
    
    ASSERT_SW_OKAY(sw_ipv4_address_init_from_this_host(&a));
    ASSERT_NOT_NULL(sw_ipv4_address_name(a, t, sizeof(t)));
    printf("%s\n", t);

    ASSERT_SW_OKAY(sw_ipv4_address_decompose(a, &a1, &a2, &a3, &a4));
    printf("%i.%i.%i.%i\n", a1, a2, a3, a4);
    
    return 0;
}
コード例 #2
0
ファイル: socket.c プロジェクト: daddyreb/Bigit_Genie
sw_result
sw_socket_join_multicast_group(
               sw_socket			self,
					sw_ipv4_address	local_address,
					sw_ipv4_address	multicast_address,
               sw_uint32			ttl)
{
	struct in_addr				addr;
   struct ip_mreq				mreq;	
#if defined(__sun) || defined(__VXWORKS__) || defined(__NetBSD__) || defined(__OpenBSD__)
	sw_uint8					real_ttl				= (sw_uint8) ttl;
#else
	sw_uint32					real_ttl				= ttl;
#endif
	int							res;
	sw_result					err;

   /*
      initialize the group membership
   */
	sw_memset(&addr, 0, sizeof(addr));
	addr.s_addr = sw_ipv4_address_saddr(local_address);
   sw_memset(&mreq, 0, sizeof(mreq));

#if defined(__VXWORKS__)

	/*
		VxWorks doesn't like it if we try and use INADDR_ANY for use in
		setting up multicast sockets.

		So we please it.
	*/
	if (sw_ipv4_address_is_any(local_address))
	{
		sw_ipv4_address current_address;

		err = sw_ipv4_address_init_from_this_host(&current_address);
		sw_check_okay(err, exit);

		mreq.imr_interface.s_addr	= sw_ipv4_address_saddr(current_address);
	}
	else
	{
		mreq.imr_interface = addr;
	}

#else

   mreq.imr_interface = addr;

#endif

	mreq.imr_multiaddr.s_addr = sw_ipv4_address_saddr(multicast_address);

	res = setsockopt(self->m_desc, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char*) &mreq, sizeof(mreq));
	err = sw_translate_error(res == 0, sw_socket_errno());
	sw_check_okay_log(err, exit);

	res = setsockopt(self->m_desc, IPPROTO_IP, IP_MULTICAST_IF, (char*) &addr, sizeof(addr));
	err = sw_translate_error(res == 0, sw_socket_errno());
	sw_check_okay_log(err, exit);

	res = setsockopt(self->m_desc, IPPROTO_IP, IP_TTL, (char*) &ttl, sizeof(ttl));
	err = sw_translate_error(res == 0, sw_socket_errno());
	sw_check_okay_log(err, exit);

	res = setsockopt(self->m_desc, IPPROTO_IP, IP_MULTICAST_TTL, (char*) &real_ttl, sizeof(real_ttl));
	err = sw_translate_error(res == 0, sw_socket_errno());
	sw_check_okay_log(err, exit);

exit:

	return err;
}