Print this page
9704 move socket functions to libc
*** 1,11 ****
! SOCKADDR(3SOCKET) Sockets Library Functions SOCKADDR(3SOCKET)
NAME
sockaddr, sockaddr_dl, sockaddr_in, sockaddr_in6, sockaddr_ll,
sockaddr_storage, sockaddr_un - Socket Address Structures
SYNOPSIS
#include <sys/socket.h>
struct sockaddr sock;
--- 1,14 ----
! SOCKADDR(3C) Standard C Library Functions SOCKADDR(3C)
NAME
sockaddr, sockaddr_dl, sockaddr_in, sockaddr_in6, sockaddr_ll,
sockaddr_storage, sockaddr_un - Socket Address Structures
+ LIBRARY
+ Standard C Library (libc, -lc)
+
SYNOPSIS
#include <sys/socket.h>
struct sockaddr sock;
*** 38,51 ****
DESCRIPTION
The sockaddr family of structures are designed to represent network
addresses for different networking protocols. The structure struct
sockaddr is a generic structure that is used across calls to various
! socket library routines (libsocket(3LIB)) such as accept(3SOCKET) and
! bind(3SOCKET). Applications do not use the struct sockaddr directly, but
! instead cast the appropriate networking family specific sockaddr
! structure to a struct sockaddr *.
Every structure in the sockaddr family begins with a member of the same
type, the sa_family_t, though the different structures all have different
names for the member. For example, the structure struct sockaddr has the
following members defined:
--- 41,53 ----
DESCRIPTION
The sockaddr family of structures are designed to represent network
addresses for different networking protocols. The structure struct
sockaddr is a generic structure that is used across calls to various
! socket routines such as accept(3C) and bind(3C). Applications do not use
! the struct sockaddr directly, but instead cast the appropriate networking
! family specific sockaddr structure to a struct sockaddr *.
Every structure in the sockaddr family begins with a member of the same
type, the sa_family_t, though the different structures all have different
names for the member. For example, the structure struct sockaddr has the
following members defined:
*** 93,119 ****
sa_family_t sin_family /* address family */
in_port_t sin_port /* IP port */
struct in_addr sin_addr /* IP address */
! The member sin_family must always have the value AF_INET for IPv4. The
members sin_port and sin_addr describe the IP address and IP port to use.
! In the case of a call to connect(3SOCKET) these represent the remote IP
address and port to which the connection is being made. In the case of
! bind(3SOCKET) these represent the IP address and port on the local host
! to which the socket is to be bound. In the case of accept(3SOCKET) these
represent the remote IP address and port of the machine whose connection
was accepted.
! The member sin_port is always stored in Network Byte Order. On many
systems, this differs from the native host byte order. Applications
! should read from the member with the function ntohs(3SOCKET) and write to
! the member with the function htons(3SOCKET). The member sin_addr is the
! four byte IPv4 address. It is also stored in network byte order. The
! common way to write out the address is to use the function inet_pton(3C)
! which converts between a human readable IP address such as "10.1.2.3" and
! the corresponding representation.
Example 1 shows how to prepare an IPv4 socket and deal with network byte-
order. See inet(7P) and ip(7P) for more information on IPv4, socket
options, etc.
--- 95,121 ----
sa_family_t sin_family /* address family */
in_port_t sin_port /* IP port */
struct in_addr sin_addr /* IP address */
! The member sin_family must always have the value AF_INET for IPv4 . The
members sin_port and sin_addr describe the IP address and IP port to use.
! In the case of a call to connect(3C) these represent the remote IP
address and port to which the connection is being made. In the case of
! bind(3C) these represent the IP address and port on the local host to
! which the socket is to be bound. In the case of accept(3C) these
represent the remote IP address and port of the machine whose connection
was accepted.
! The member sin_port is always stored in network byte order. On many
systems, this differs from the native host byte order. Applications
! should read from the member with the function ntohs(3C) and write to the
! member with the function htons(3C). The member sin_addr is the four byte
! IPv4 address. It is also stored in network byte order. The common way
! to write out the address is to use the function inet_pton(3C) which
! converts between a human readable IP address such as `10.1.2.3' and the
! corresponding representation.
Example 1 shows how to prepare an IPv4 socket and deal with network byte-
order. See inet(7P) and ip(7P) for more information on IPv4, socket
options, etc.
*** 135,148 ****
The member sin6_family must always have the value AF_INET6. The members
sin6_port and sin6_addr are the IPv6 equivalents of the struct
sockaddr_in sin_port and sin_addr. Like their IPv4 counterparts, both of
these members must be in network byte order. The member sin6_port
describes the IPv6 port and should be manipulated with the functions
! ntohs(3SOCKET) and htons(3SOCKET). The member sin6_addr describes the
! 16-byte IPv6 address. In addition to the function inet_pton(3C), the
! header file <netinet/in.h> defines many macros for manipulating and
! testing IPv6 addresses.
The member sin6_flowinfo contains the traffic class and flow label
associated with the IPv6 header. The member sin6_scope_id may contain an
identifier which varies based on the scope of the address in sin6_addr.
Applications do not need to initialize sin6_scope_id; it will be
--- 137,150 ----
The member sin6_family must always have the value AF_INET6. The members
sin6_port and sin6_addr are the IPv6 equivalents of the struct
sockaddr_in sin_port and sin_addr. Like their IPv4 counterparts, both of
these members must be in network byte order. The member sin6_port
describes the IPv6 port and should be manipulated with the functions
! ntohs(3C) and htons(3C). The member sin6_addr describes the 16-byte IPv6
! address. In addition to the function inet_pton(3C), the header file
! <netinet/in.h> defines many macros for manipulating and testing IPv6
! addresses.
The member sin6_flowinfo contains the traffic class and flow label
associated with the IPv6 header. The member sin6_scope_id may contain an
identifier which varies based on the scope of the address in sin6_addr.
Applications do not need to initialize sin6_scope_id; it will be
*** 187,206 ****
interface is Ethernet which has the value IFT_ETHER. The full set of
types is derived from RFC1573 and recorded in the file <net/if_types.h>.
The member sdl_slen describes the length of a selector, if it exists, for
the specified medium. This is used in protocols such as Trill.
! The sdl_data, sdl_nlen and sdl_alen members together describe a character
! string containing the interface name and the link-layer network address.
! The name starts at the beginning of sdl_data, i.e. at sdl_data[0]. The
! name of the interface occupies the next sdl_nlen bytes and is not NUL
! terminated. The link-layer network address begins immediately after the
! interface name, and is sdl_alen bytes long. The macro LLADDR(struct
! sockaddr_dl *) returns the start of the link-layer network address. The
! interpretation of the link-layer address depends on the value of
! sdl_type. For example, if the type is IFT_ETHER then the address is
! expressed as a 6-byte MAC address.
struct sockaddr_ll
The sockaddr_ll is used as part of a socket type which is responsible for
packet capture: AF_PACKET sockets. It is generally designed for use with
Ethernet networks. The members of the struct sockaddr_ll are:
--- 189,208 ----
interface is Ethernet which has the value IFT_ETHER. The full set of
types is derived from RFC1573 and recorded in the file <net/if_types.h>.
The member sdl_slen describes the length of a selector, if it exists, for
the specified medium. This is used in protocols such as Trill.
! The sdl_data, sdl_nlen, and sdl_alen members together describe a
! character string containing the interface name and the link-layer network
! address. The name starts at the beginning of sdl_data, i.e. at
! sdl_data[0]. The name of the interface occupies the next sdl_nlen bytes
! and is not NUL terminated. The link-layer network address begins
! immediately after the interface name, and is sdl_alen bytes long. The
! macro LLADDR(struct sockaddr_dl *) returns the start of the link-layer
! network address. The interpretation of the link-layer address depends on
! the value of sdl_type. For example, if the type is IFT_ETHER then the
! address is expressed as a 6-byte MAC address.
struct sockaddr_ll
The sockaddr_ll is used as part of a socket type which is responsible for
packet capture: AF_PACKET sockets. It is generally designed for use with
Ethernet networks. The members of the struct sockaddr_ll are:
*** 214,229 ****
uint8_t sll_addr[8]; /* hardware type */
The member sll_family must be AF_PACKET. The member sll_protocol refers
to a link-layer protocol. For example, when capturing Ethernet frames
the value of sll_protocol is the Ethertype. This member is written in
! network byte order and applications should use htons(3SOCKET) and
! ntohs(3SOCKET) to read and write the member.
The member sll_ifindex is the interface's index. It is used as an
identifier in various ioctls and included in the output of ifconfig(1M).
! When calling bind(3SOCKET) it should be filled in with the index that
corresponds to the interface for which packets should be captured on.
The member sll_pkttype describes the type of the packet based on a list
of types in the header file <netpacket/packet.h>. These types include:
PACKET_OUTGOING, a packet that was leaving the host and has been looped
--- 216,231 ----
uint8_t sll_addr[8]; /* hardware type */
The member sll_family must be AF_PACKET. The member sll_protocol refers
to a link-layer protocol. For example, when capturing Ethernet frames
the value of sll_protocol is the Ethertype. This member is written in
! network byte order and applications should use htons(3C) and ntohs(3C) to
! read and write the member.
The member sll_ifindex is the interface's index. It is used as an
identifier in various ioctls and included in the output of ifconfig(1M).
! When calling bind(3C) it should be filled in with the index that
corresponds to the interface for which packets should be captured on.
The member sll_pkttype describes the type of the packet based on a list
of types in the header file <netpacket/packet.h>. These types include:
PACKET_OUTGOING, a packet that was leaving the host and has been looped
*** 238,254 ****
contains the length, in bytes, of the hardware address, while the member
sll_addr contains the actual address in network byte order.
EXAMPLES
Example 1 Preparing an IPv4 sockaddr_in to connect to a remote host
- The following example shows how one would open a socket and prepare it to
- connect to the remote host whose address is the IP address 127.0.0.1 on
- port 80. This program should be compiled with the C compiler cc and
- linked against the libraries libsocket and libnsl. If this example was
- named ip4.c, then the full link line would be cc ip4.c -lsocket -lnsl.
-
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <inttypes.h>
--- 240,253 ----
contains the length, in bytes, of the hardware address, while the member
sll_addr contains the actual address in network byte order.
EXAMPLES
Example 1 Preparing an IPv4 sockaddr_in to connect to a remote host
+ The following example shows how one would open a socket and
+ prepare it to connect to the remote host whose address is the IP
+ address 127.0.0.1 on port 80.
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <inttypes.h>
*** 283,299 ****
return (0);
}
Example 2 Preparing an IPv6 sockaddr_in6 to bind to a local address
- The following example shows how one would open a socket and prepare it to
- bind to the local IPv6 address ::1 port on port 12345. This program
- should be compiled with the C compiler cc and linked against the
- libraries libsocket and libnsl. If this example was named ip6.c, then
- the full compiler line would be cc ip6.c -lsocket -lnsl.
-
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <inttypes.h>
--- 282,295 ----
return (0);
}
Example 2 Preparing an IPv6 sockaddr_in6 to bind to a local address
+ The following example shows how one would open a socket and
+ prepare it to bind to the local IPv6 address ::1 port on port
+ 12345.
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <inttypes.h>
*** 328,337 ****
return (0);
}
SEE ALSO
! socket(3HEAD), un.h(3HEAD), accept(3SOCKET), bind(3SOCKET),
! connect(3SOCKET), socket(3SOCKET), arp(7P), inet(7P), inet6(7P), ip(7P),
! ip6(7P)
! illumos April 9, 2016 illumos
--- 324,332 ----
return (0);
}
SEE ALSO
! accept(3C), bind(3C), connect(3C), socket(3C), socket.h(3HEAD),
! un.h(3HEAD), arp(7P), inet(7P), inet6(7P), ip(7P), ip6(7P)
! illumos August 2, 2018 illumos