z/OS Communications Server: IP Sockets Application Programming Interface Guide and Reference
Previous topic | Next topic | Contents | Contact z/OS | Library | PDF


How socket structures are represented

z/OS Communications Server: IP Sockets Application Programming Interface Guide and Reference
SC27-3660-00

Instead of using binary-based data structures, the REXX socket library represents all data structures as strings of space-delimited values, where each value represents a field in the data structure.

The REXX language is a type-independent language. All data is manipulated and represented using a character format. When an application passes data into the REXX socket library, the data must be a space-delimited string. When the REXX socket library returns socket information, it returns the information as a space-delimited string on the return value.

Rules:
  • All IPv4 addresses are represented as strings in dotted decimal format.
  • All IPv6 addresses are represented as strings in IPv6 colon hexadecimal format.
  • When a NAME string is returned as a result, the IP address is in IPv4 dotted decimal or IPv6 colon hexadecimal format.
Tip: When you specify a NAME string as an input parameter to a command, you can specify the ipaddress field either as an IP address or as a host name to be resolved by a name server. For example, you can code NAME=”AF_INET 1049 MYHOST”, where AF_INET is the address family, 1049 is the port number, and MYHOST is the host name to be resolved to an IP address.

struct sockaddr_in

This structure represents an IPv4 socket address. In the REXX socket library, this structure is represented by the NAME string. The NAME string has the following format:
NAME = “domain portid ipaddress
where:
domain
The number 2 or AF_INET
portid
The local or remote port to which the socket is to be bound or connected
ipaddress
The IPv4 address of the local or remote host to which the socket is to be bound or connected
The following string is an example of an IPv4 NAME string:
NAME = "AF_INET 24 10.11.103.1";

struct sockaddr_in6

This structure represents an IPv6 socket address. In the REXX socket library, this structure is represented by the NAME string. The NAME string has the following format:
NAME = “domain portid flowinfo ipaddress scopeid
where:
domain
The number 19 or AF_INET6.
portid
The local or remote port to which the socket is to be bound or connected.
flowinfo
This value must be set to 0.
ipaddress
The IPv6 address of the local or remote host to which the socket is to be bound or connected.
scopeid
Identifies the interfaces that are applicable for the scope of the address that is specified in the ipaddress field. For a link-local IP address, the scopeid field can specify a link index, which identifies a set of interfaces. For all other scopes, the scopeid field must be set to 0. Setting the scopeid field to 0 indicates that any address type and scope can be specified.
The following string is an example of an IPv6 NAME string:
NAME = "AF_INET6 24 0 2001:10:11:103::1 0"

struct ip_mreq

This structure represents the mapping between an IPv4 multicast address and an IPv4 interface. In the REXX socket library, this structure is represented by the ipmreq string. The ipmreq string has the following format:
ipmreq = "maddress iaddress"
where:
maddress
An IPv4 multicast address
iaddress
The IPv4 interface address
The following string is an example of an IPv4 ipmreq string:
ipmreq = "224.224.224.1 10.123.21.3"

struct ipv6_mreq

This structure represents the mapping between an IPv6 multicast address and an interface index. In the REXX socket library, this structure is represented by the ipmreq string. The ipmreq string has the following format:
ipmreq = "maddress index" 
where:
maddress
An IPv6 multicast address
index
An interface index number
The following string is an example of an IPv6 ipmreq string:
ipmreq = "FF05::101 34"

struct ip_mreq_source

This structure represents a multicast source filter. It is used with the IOCTL command to filter the multicast packets that an application wants to receive; it also defines the remote host from which the packets are sent. In the REXX socket library, this structure is represented by the ip_mreq_source string. The ip_mreq_source string has the following format:
ipmreqsource = "maddress saddress iaddress"
where:
maddress
An IPv4 multicast address
saddress
An IPv4 source address of a remote host
iaddress
An IPv4 interface address
The following string is an example of an ip_mreq_source string:
ipmreqsource ="224.224.224.2 10.1.2.3 10.123.21.3"
Restriction: This structure supports IPv4 addresses only.

struct group_req

This structure represents a protocol-independent mapping between a multicast IP address and an interface index. It is used with the IOCTL command to join and leave multicast groups. In the REXX socket library, this structure is represented by the groupreq string. The groupreq string has the following format:
groupreq = "index NAME"
where:
index
An interface index
NAME
The NAME string of a multicast socket address
The following strings are examples of groupreq strings:
groupreq = "15664 AF_INET 5000 224.224.224.2"
groupreq = "15667 AF_INET6 5000 0 FF05::101 0"

struct group_req_source

This structure represents a protocol-independent mapping between a multicast IP address, an interface index, and a source address for a remote host. It is used with the IOCTL command to filter the multicast packets that an application wants to receive; it also defines the remote host from which the packets are sent. In the REXX socket library, this structure is represented by the groupreqsource string. The groupreqsource string has the following format:
groupreqsource = "index M_NAME S_NAME"
where:
index
An interface index
M_NAME
The NAME string of a multicast socket address
S_NAME
The NAME string of a source socket address
The following strings are examples of groupreqsource strings:
groupreqsource = "15664 AF_INET 5000 224.224.224.2 AF_INET 5000 10.1.2.3"
groupreqsource = "15667 AF_INET6 5000 0 FF05::101 0 AF_INET6 5000 0 
                  2001:10:1:2::3 0"

Go to the previous page Go to the next page




Copyright IBM Corporation 1990, 2014