The SENDMSG macro sends messages on a socket with descriptor s passed in an array of messages.
The following requirements apply to this call:
Authorization: |
Supervisor state or problem state, any PSW key. |
Dispatchable unit mode: |
Task. |
Cross memory mode: |
PASN = HASN. |
Amode: |
31-bit or 24-bit.
|
ASC mode: |
Primary address space control (ASC) mode. |
Interrupt status: |
Enabled for interrupts. |
Locks: |
Unlocked. |
Control parameters: |
All parameters must be addressable by the caller
and in the primary address space. |
>>-EZASMI--TYPE=SENDMSG--,S--=--+-number---+-------------------->
+-address--+
+-*indaddr-+
'-(reg)----'
>--,MSG--=--+-address--+--+---------------------------+--------->
+-*indaddr-+ '-,FLAGS--=--+-'MSG_OOB'--+-'
'-(reg)----' +-'MSG_PEEK'-+
+-address----+
+-*indaddr---+
'-(reg)------'
>--,ERRNO--=--+-address--+--,RETCODE--=--+-address--+----------->
+-*indaddr-+ +-*indaddr-+
'-(reg)----' '-(reg)----'
>--+---------------------------+--+-------------------------+--->
+-,ECB--=--+-address--+-----+ '-,ERROR--=--+-address--+-'
| +-*indaddr-+ | +-*indaddr-+
| '-(reg)----' | '-(reg)----'
'-,REQAREA--=--+-address--+-'
+-*indaddr-+
'-(reg)----'
>--+------------------------+----------------------------------><
'-,TASK--=--+-address--+-'
+-*indaddr-+
'-(reg)----'
- Keyword
- Description
- S
- Input parameter. A value or the
address of a halfword binary number specifying the socket descriptor.
- MSG
- On input, this is a pointer to a message
header into which the message is received on completion of the call.
- NAME
-
On input, a pointer to a buffer where the sender's IPv4 or
IPv6 address will be stored on completion of the call. The storage
being pointed to should be for an IPv4 or IPv6 socket address. Include
the SYS1.MACLIB(BPXYSOCK) macro to get the assembler mappings for
the socket address structure. The socket address structure mappings
begin at the SOCKADDR label. The AF_INET socket address structure
fields start at the SOCK_SIN label. The AF_INET6 socket address structure
fields start at the SOCK_SIN6 label.
The IPv4 socket address
structure contains the following fields:
- Field
- Description
- FAMILY
- A halfword binary number specifying the IPv4 addressing family.
The value for the IPv4 socket descriptor (S parameter) is a decimal
2, indicating AF_INET.
- PORT
- A halfword binary number specifying the port number of the sending
socket.
- IPv4-ADDRESS
- A fullword binary number specifying the 32-bit IPv4 Internet
address of the sending socket.
- RESERVED
- An 8-byte reserved field. This field is required, but is not
used.
The IPv6 socket address structure contains the following
fields: - Field
- Description
- NAMELEN
- A 1-byte binary field specifying the length of this IPv6 socket
address structure. Any value specified by the use of this field is
ignored when processed as input and the field is set to 0 when processed
as output.
- FAMILY
- A 1-byte binary field specifying the IPv6 addressing family.
The value for the IPv6 socket descriptor (S parameter) is a decimal
19, indicating AF_INET6.
- PORT
- A halfword binary number specifying the port number of the sending
socket.
- FLOW-INFO
- A fullword binary field specifying the traffic class and flow
label. This field must be set to 0.
- IPv6-ADDRESS
- 16-byte binary field specifying the 128-bit IPv6 Internet address,
in network byte order, of the sending socket.
- SCOPE-ID
- A fullword binary field which identifies a set of interfaces as
appropriate for the scope of the address carried in the IPv6-ADDRESS field. A value of 0 indicates the SCOPE-ID field does not identify the set of interfaces
to be used, and can be specified for any address types and scopes.
For a link scope IPv6-ADDRESS, SCOPE-ID can specify a link index which identifies
a set of interfaces. For all other address scopes, SCOPE-ID can be set to 0.
- IOV
- A pointer to an array of three fullword
structures with the number of structures equal to the value in IOVCNT
and the format of the structures as follows:
- Fullword 1
- Input parameter. The address of a data buffer.
- Fullword 2
- Input parameter. The ALET for this buffer.
If the buffer is in the primary address space, this should be zeros.
If a nonzero ALET is specified, the ALET must represent a valid entry in the dispatchable unit access list
(DU-AL) for the task issuing this call. Note that ALETs can be specified only for synchronous socket calls (for example,
ECB/REQAREA cannot be specified). An exception to this is an ALET representing a SCOPE=COMMON data space.
- Fullword 3
- Input parameter. The length of the data buffer referenced in Fullword
1.
- IOVCNT
- A pointer to a fullword binary
field specifying the number of data buffers provided for this call.
- ACCRIGHTS
- A pointer to the access rights sent. This field is ignored.
- ACCRLEN
- A pointer to the length of the access rights sent. This field
is ignored.
- FLAGS
- Input parameter. FLAGS can be a literal value or a fullword binary field:
Literal Value |
Binary Value |
Description |
---|
'MSG_OOB' |
X'00000001' |
Send out-of-band data. (Stream sockets
only.) |
'MSG_DONTROUTE' |
X'00000004' |
Do not route. Routing is handled
by the calling program. |
- ERRNO
- Output parameter. A fullword binary
field. If RETCODE is negative, this contains
an error number.
- RETCODE
- Output parameter. A fullword binary
field.
- Value
- Description
- 0 or >0
- A successful call. The value is set to the number of bytes transmitted.
- -1
- Check ERRNO for an error code.
- ECB or REQAREA
- Input parameter. This parameter is required if you are
using APITYPE=3. It points to a 104-byte field containing:
- For ECB
- A 4-byte ECB posted by TCP/IP when the
macro completes.
- For REQAREA
- A 4-byte user token (set by you) that is presented to your exit
when the response to this function request is complete.
- For ECB/REQAREA
- The last 100 bytes is a storage field used by the interface to
save the state information.
Note: This storage must not be modified until the
macro function has completed and the ECB has
been posted, or the asynchronous exit has been driven.
- ERROR
- Input parameter. The location in
your program to receive control when the application programming interface
(API) processing module cannot be loaded.
- TASK
- Input parameter. The location of the task storage area in your
program.