---
name: "sctp_sendmsg"
section: "3"
platform: "linux"
package: "lksctp-tools"
version: "1.0.21-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux", "freebsd"]
url: "https://new.carta.tech/sctp_sendmsg"
---

# sctp\_sendmsg(3)

Send a message from a SCTP socket.

## NAME

sctp\_sendmsg - Send a message from a SCTP socket.

## SYNOPSIS

```
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/sctp.h>

int sctp_sendmsg(int sd, const void * msg, size_t len,
                 struct sockaddr *to, socklen_t tolen,
                 uint32_t ppid, uint32_t flags,
                 uint16_t stream_no, uint32_t timetolive,
                 uint32_t context);
```

## DESCRIPTION

**sctp\_sendmsg** is a wrapper library function that can be used to send a message from a socket while using the advanced features of SCTP.  *sd* is the socket descriptor from which the message pointed to by *msg* of length *len* is sent. *to* is the destination address of the message and *tolen* is the length of the destination address. *stream\_no* identifies the stream number that the application wishes to send this message to. *flags* parameter is composed of a bitwise OR of the following values.

- **SCTP\_UNORDERED**

  This flags requests the un-ordered delivery of the message.

- **SCTP\_ADDR\_OVER**

  This flag, in the one-to-many style, requests the SCTP stack to override the primary destination address with address specified in *to.*

- **SCTP\_ABORT**

  Setting this flag causes the specified association to abort by sending an ABORT message to the peer(one-to-many style only). The ABORT chunk will contain an error cause 'User Initiated Abort' with cause code 12. The cause specific information of this error cause is provided in *msg.*

- **SCTP\_EOF**

  Setting this flag invokes the SCTP graceful shutdown procedure on the specific association(one-to-many style only).

- **SCTP\_SENDALL**

  This flag, if set, will cause a one-to-many style socket to send the message to all associations that are currently established on this socket. For the one-to-one style socket, this flag has no effect.

- **SCTP\_SACK\_IMMEDIATELY**

  This flag allows the application to set the I bit of the last DATA chunk when sending each user message to make sure the corresponding SACK can be sent by peer without delay.

- **SCTP\_PR\_SCTP\_{TTL\|RTX\|PRIO}**

  One of these 3 pr\_policies can be used through this flag with its pr\_value set in timetolive parameter for this message. Note that **[sctp\_sendv(3)](/sctp_sendv/3.md)** with infotype SCTP\_SENDV\_PRINFO also works for PR-SCTP.

*timetolive* specifies the time duration in milliseconds. The sending side will expire the message if the message has not been sent to the peer within this time period. A value of 0 indicates that no timeout should occur on this message. It also works as the pr\_value if flags parameter is set to pr\_policy. *ppid* is an opaque unsigned value that is passed to the remote end along with the message. *context* is a 32 bit opaque value that is passed back to the upper layer along with the undelivered message if an error occurs on the send of the message.

## RETURN VALUE

On success, **sctp\_sendmsg** returns the number of bytes sent or -1 if an error occurred.

## SEE ALSO

[**sctp**(7)](/sctp/7.md) [**sctp\_bindx**(3)](/sctp_bindx/3.md), [**sctp\_connectx**(3)](/sctp_connectx/3.md), [**sctp\_sendv**(3)](/sctp_sendv/3.md), [**sctp\_send**(3)](/sctp_send/3.md), [**sctp\_recvmsg**(3)](/sctp_recvmsg/3.md), [**sctp\_recvv**(3)](/sctp_recvv/3.md), [**sctp\_peeloff**(3)](/sctp_peeloff/3.md), [**sctp\_getpaddrs**(3)](/sctp_getpaddrs/3.md), [**sctp\_getladdrs**(3)](/sctp_getladdrs/3.md), [**sctp\_opt\_info**(3)](/sctp_opt_info/3.md),
