142 lines
9.4 KiB
HTML
142 lines
9.4 KiB
HTML
<?xml version="1.0" encoding="UTF-8"?>
|
||
<!DOCTYPE html
|
||
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||
<html lang="en-us" xml:lang="en-us">
|
||
<head>
|
||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||
<meta name="security" content="public" />
|
||
<meta name="Robots" content="index,follow" />
|
||
<meta http-equiv="PICS-Label" content='(PICS-1.1 "http://www.icra.org/ratingsv02.html" l gen true r (cz 1 lz 1 nz 1 oz 1 vz 1) "http://www.rsac.org/ratingsv01.html" l gen true r (n 0 s 0 v 0 l 0) "http://www.classify.org/safesurf/" l gen true r (SS~~000 1))' />
|
||
<meta name="DC.Type" content="reference" />
|
||
<meta name="DC.Title" content="Use AF_INET6 address family" />
|
||
<meta name="abstract" content="AF_INET6 sockets provide support for Internet Protocol version 6 (IPv6) 128 bit (16 byte) address structures. Programmers can write applications using AF_INET6 address family to accept client requests for either IPv4 or IPv6 nodes or from IPv6 nodes only." />
|
||
<meta name="description" content="AF_INET6 sockets provide support for Internet Protocol version 6 (IPv6) 128 bit (16 byte) address structures. Programmers can write applications using AF_INET6 address family to accept client requests for either IPv4 or IPv6 nodes or from IPv6 nodes only." />
|
||
<meta name="DC.Relation" scheme="URI" content="uaddrfam.htm" />
|
||
<meta name="DC.Relation" scheme="URI" content="prerequisites.htm" />
|
||
<meta name="DC.Relation" scheme="URI" content="ip6scen.htm" />
|
||
<meta name="DC.Relation" scheme="URI" content="../rzai2/rzai2compipv4ipv6.htm" />
|
||
<meta name="DC.Relation" scheme="URI" content="../apis/recvfr.htm" />
|
||
<meta name="DC.Relation" scheme="URI" content="../apis/accept.htm" />
|
||
<meta name="DC.Relation" scheme="URI" content="../apis/gpeern.htm" />
|
||
<meta name="DC.Relation" scheme="URI" content="../apis/sendto.htm" />
|
||
<meta name="DC.Relation" scheme="URI" content="../apis/connec.htm" />
|
||
<meta name="DC.Relation" scheme="URI" content="../apis/bind.htm" />
|
||
<meta name="DC.Relation" scheme="URI" content="../apis/ghostnm.htm" />
|
||
<meta name="DC.Relation" scheme="URI" content="../apis/getaddrinfo.htm" />
|
||
<meta name="DC.Relation" scheme="URI" content="../apis/ghosta.htm" />
|
||
<meta name="DC.Relation" scheme="URI" content="../apis/getnameinfo.htm" />
|
||
<meta name="DC.Relation" scheme="URI" content="ip6scen.htm" />
|
||
<meta name="copyright" content="(C) Copyright IBM Corporation 2001, 2006" />
|
||
<meta name="DC.Rights.Owner" content="(C) Copyright IBM Corporation 2001, 2006" />
|
||
<meta name="DC.Format" content="XHTML" />
|
||
<meta name="DC.Identifier" content="uafinet6" />
|
||
<meta name="DC.Language" content="en-us" />
|
||
<!-- All rights reserved. Licensed Materials Property of IBM -->
|
||
<!-- US Government Users Restricted Rights -->
|
||
<!-- Use, duplication or disclosure restricted by -->
|
||
<!-- GSA ADP Schedule Contract with IBM Corp. -->
|
||
<link rel="stylesheet" type="text/css" href="./ibmdita.css" />
|
||
<link rel="stylesheet" type="text/css" href="./ic.css" />
|
||
<title>Use AF_INET6 address family</title>
|
||
</head>
|
||
<body id="uafinet6"><a name="uafinet6"><!-- --></a>
|
||
<!-- Java sync-link --><script language="Javascript" src="../rzahg/synch.js" type="text/javascript"></script>
|
||
<h1 class="topictitle1">Use AF_INET6 address family</h1>
|
||
<div><p>AF_INET6 sockets provide support for Internet Protocol version
|
||
6 (IPv6) 128 bit (16 byte) address structures. Programmers can write applications
|
||
using AF_INET6 address family to accept client requests for either IPv4 or
|
||
IPv6 nodes or from IPv6 nodes only.</p>
|
||
<div class="section"><p>Like AF_INET sockets, AF_INET6 sockets can be
|
||
either connection-oriented (type SOCK_STREAM) or they can be connectionless
|
||
(type SOCK_DGRAM). Connection-oriented AF_INET6 sockets use TCP as the transport
|
||
protocol. Connectionless AF_INET6 sockets use User Datagram Protocol (UDP)
|
||
as the transport protocol. When you create an AF_INET6 domain socket, you
|
||
specify AF_INET6 for the address family in the socket program. AF_INET6 sockets
|
||
can also use a type of SOCK_RAW. If this type is set, the application connects
|
||
directly to the IP layer and does not use either the TCP or UDP transport.</p>
|
||
</div>
|
||
<div class="section"><h4 class="sectiontitle">IPv6 applications compatibility with IPv4 applications</h4><p>Socket
|
||
applications written with AF_INET6 address family allow Internet Protocol
|
||
version 6 (IPv6) applications to work with Internet Protocol version 4 (IPv4)
|
||
applications (those applications that use AF_INET address family). This feature
|
||
allows socket programmers to use an IPv4-mapped IPv6 address format. This
|
||
address format represents the IPv4 address of an IPv4 node to be represented
|
||
as an IPv6 address. The IPv4 address is encoded into the low-order 32 bits
|
||
of the IPv6 address, and the high-order 96 bits hold the fixed prefix 0:0:0:0:0:FFFF.
|
||
For example, an IPv4- mapped address can look like this: </p>
|
||
<pre> ::FFFF:192.1.1.1</pre>
|
||
</div>
|
||
<div class="section"><p>These addresses can be generated automatically by the <span class="apiname">getaddrinfo()</span> function,
|
||
when the specified host has only IPv4 addresses. </p>
|
||
</div>
|
||
<div class="section"><p>You can create applications that use AF_INET6 sockets to open
|
||
TCP connections to IPv4 nodes. To accomplish this task, you can encode the
|
||
destination's IPv4 address as an IPv4–mapped IPv6 address and pass that address
|
||
within a sockaddr_in6 structure in the <span class="apiname">connect()</span> or <span class="apiname">sendto()</span> call.
|
||
When applications use AF_INET6 sockets to accept TCP connections from IPv4
|
||
nodes, or receive UDP packets from IPv4 nodes, the system returns the peer's
|
||
address to the application in the <span class="apiname">accept()</span>, <span class="apiname">recvfrom()</span>,
|
||
or <span class="apiname">getpeername()</span> calls using a sockaddr_in6 structure encoded
|
||
this way. </p>
|
||
</div>
|
||
<div class="section"><p>While the <span class="apiname">bind()</span> function allows applications
|
||
to select the source IP address of UDP packets and TCP connections, applications
|
||
often want the system to select the source address for them. Applications
|
||
use in6addr_any similarly to the way they use the INADDR_ANY macro in IPv4
|
||
for this purpose. An additional feature of binding in this way is that it
|
||
allows an AF_INET6 socket to communicate with both IPv4 and IPv6 nodes. For
|
||
example, an application issuing an <span class="apiname">accept()</span> on a listening
|
||
socket bound to in6addr_any accepts connections from either IPv4 or IPv6 nodes.
|
||
This behavior can be modified through the use of the IPPROTO_IPV6 level socket
|
||
option IPV6_V6ONLY. Few applications need to know which type of node with
|
||
which they are interoperating. However, for those applications that do need
|
||
to know, the IN6_IS_ADDR_V4MAPPED() macro defined in <netinet/in.h>
|
||
is provided.</p>
|
||
</div>
|
||
<div class="section"><h4 class="sectiontitle">IPv6 restrictions</h4><div class="p">Currently, i5/OS™ support
|
||
of IPv6 is limited in some functions. The following table lists
|
||
these restrictions and their implications to socket programmers.
|
||
<div class="tablenoborder"><table cellpadding="4" cellspacing="0" summary="" frame="border" border="1" rules="all"><caption>Table 1. IPv6 restrictions and implications</caption><thead align="left"><tr><th valign="top" id="d0e77">Restriction</th>
|
||
<th valign="top" id="d0e79">Implication</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody><tr><td valign="top" headers="d0e77 ">iSeries™ host table does not support IPv6 addresses.</td>
|
||
<td valign="top" headers="d0e79 ">The <span class="apiname">getaddrinfo()</span> and <span class="apiname">getnameinfo()</span> APIs
|
||
are not able to locate IPv6 addresses in the host table. These APIs find addresses
|
||
in the Domain Name System (DNS) only.</td>
|
||
</tr>
|
||
<tr><td valign="top" headers="d0e77 ">The <span class="apiname">gethostbyname()</span> and <span class="apiname">gethostbyaddr()</span> APIs
|
||
only support IPv4 address resolution.</td>
|
||
<td valign="top" headers="d0e79 ">Use <span class="apiname">getaddrinfo()</span> and <span class="apiname">getnameinfo()</span> APIs
|
||
if IPv6 address resolution is required.</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<div class="familylinks">
|
||
<div class="parentlink"><strong>Parent topic:</strong> <a href="uaddrfam.htm" title="This topic includes sample programs that illustrate each of the socket address families.">Design applications with address families</a></div>
|
||
</div>
|
||
<div class="relref"><strong>Related reference</strong><br />
|
||
<div><a href="prerequisites.htm" title="Before writing socket applications, you must first complete these steps.">Prerequisites for socket programming</a></div>
|
||
<div><a href="ip6scen.htm" title="This topic describes a typical situation in which you might want to use the AF_INET6 address family.">Socket scenario: Create an application to accept IPv4 and IPv6 clients</a></div>
|
||
</div>
|
||
<div class="relinfo"><strong>Related information</strong><br />
|
||
<div><a href="../rzai2/rzai2compipv4ipv6.htm">Compare IPv4 to IPv6</a></div>
|
||
<div><a href="../apis/recvfr.htm">recvfrom()</a></div>
|
||
<div><a href="../apis/accept.htm">accept()</a></div>
|
||
<div><a href="../apis/gpeern.htm">getpeername()</a></div>
|
||
<div><a href="../apis/sendto.htm">sendto()</a></div>
|
||
<div><a href="../apis/connec.htm">connect()</a></div>
|
||
<div><a href="../apis/bind.htm">bind()</a></div>
|
||
<div><a href="../apis/ghostnm.htm">gethostbyname()</a></div>
|
||
<div><a href="../apis/getaddrinfo.htm">getaddrinfo()</a></div>
|
||
<div><a href="../apis/ghosta.htm">gethostbyaddr()</a></div>
|
||
<div><a href="../apis/getnameinfo.htm">getnameinfo()</a></div>
|
||
</div>
|
||
</div>
|
||
</body>
|
||
</html> |