forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			85 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
| PRNetAddr
 | |
| =========
 | |
| 
 | |
| Type used with `Socket Manipulation
 | |
| Functions <Socket_Manipulation_Functions>`__ to specify a network
 | |
| address.
 | |
| 
 | |
| 
 | |
| Syntax
 | |
| ------
 | |
| 
 | |
| .. code::
 | |
| 
 | |
|    #include <prio.h>
 | |
| 
 | |
|    union PRNetAddr {
 | |
|      struct {
 | |
|         PRUint16 family;
 | |
|         char data[14];
 | |
|      } raw;
 | |
|      struct {
 | |
|         PRUint16 family;
 | |
|         PRUint16 port;
 | |
|         PRUint32 ip;
 | |
|         char pad[8];
 | |
|      } inet;
 | |
|    #if defined(_PR_INET6)
 | |
|      struct {
 | |
|         PRUint16 family;
 | |
|         PRUint16 port;
 | |
|         PRUint32 flowinfo;
 | |
|         PRIPv6Addr ip;
 | |
|      } ipv6;
 | |
|    #endif /* defined(_PR_INET6) */
 | |
|    };
 | |
| 
 | |
|    typedef union PRNetAddr PRNetAddr;
 | |
| 
 | |
| 
 | |
| Fields
 | |
| ~~~~~~
 | |
| 
 | |
| The structure has the following fields:
 | |
| 
 | |
| ``family``
 | |
|    Address family: ``PR_AF_INET|PR_AF_INET6`` for ``raw.family``,
 | |
|    ``PR_AF_INET`` for ``inet.family``, ``PR_AF_INET6`` for
 | |
|    ``ipv6.family``.
 | |
| ``data``
 | |
|    Raw address data.
 | |
| ``port``
 | |
|    Port number of TCP or UDP, in network byte order.
 | |
| ``ip``
 | |
|    The actual 32 (for ``inet.ip``) or 128 (for ``ipv6.ip``) bits of IP
 | |
|    address. The ``inet.ip`` field is in network byte order.
 | |
| ``pad``
 | |
|    Unused.
 | |
| ``flowinfo``
 | |
|    Routing information.
 | |
| 
 | |
| 
 | |
| Description
 | |
| -----------
 | |
| 
 | |
| The union :ref:`PRNetAddr` represents a network address. NSPR supports only
 | |
| the Internet address family. By default, NSPR is built to support only
 | |
| IPv4, but it's possible to build the NSPR library to support both IPv4
 | |
| and IPv6. Therefore, the ``family`` field can be ``PR_AF_INET`` only for
 | |
| default NSPR, and can also be ``PR_AF_INET6`` if the binary supports
 | |
| ``IPv6``.
 | |
| 
 | |
| :ref:`PRNetAddr` is binary-compatible with the socket address structures in
 | |
| the familiar Berkeley socket interface, although this fact should not be
 | |
| relied upon. The raw member of the union is equivalent to
 | |
| ``struct sockaddr``, the ``inet`` member is equivalent to
 | |
| ``struct sockaddr_in``, and if the binary is built with ``IPv6``
 | |
| support, the ``ipv6`` member is equivalent to ``struct sockaddr_in6``.
 | |
| (Note that :ref:`PRNetAddr` does not have the ``length`` field that is
 | |
| present in ``struct sockaddr_in`` on some Unix platforms.)
 | |
| 
 | |
| The macros ``PR_AF_INET``, ``PR_AF_INET6``, ``PR_INADDR_ANY``,
 | |
| ``PR_INADDR_LOOPBACK`` are defined if ``prio.h`` is included.
 | |
| ``PR_INADDR_ANY`` and ``PR_INADDR_LOOPBACK`` are special ``IPv4``
 | |
| addresses in host byte order, so they must be converted to network byte
 | |
| order before being assigned to the ``inet.ip`` field.
 | 
