---
title: sendto
description: "**sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen)**"
url: https://www.hikunpeng.com/document/detail/zh/knet/api/docs/zh/api/posix_apis/sendto.md
sourcePath: /source/zh/knet/api/docs/zh/api/posix_apis/sendto.md
indexId: fdbac1650b9a3ccce658650b514fc1272e04e96a1a541b486b4b601b107a9b6f52
---
# sendto

## 接口名称

**sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen)**

## 接口描述

发送数据。

> [!NOTE]说明
>K-NET用户态TCP/IP协议栈数据发送端支持TCP协议优雅断链，当对端异常关闭时，发送端需要借用TCP重传超时机制/保活机制断链。

## 参数说明

|参数|说明|备注|
|--|--|--|
|sockfd|通信节点描述符|传入socket描述符。|
|*buf|要发送的数据缓冲区|请用户保证内存的有效性。发送成功后，buf由用户自行维护。|
|len|即将发送的数据长度|调用者保证长度的有效性，待发送数据总长度可设置范围为(0, SSIZE_MAX]。代表buf缓冲区中数据的长度。|
|flags|指定发送方式|支持MSG_DONTWAIT标志，其他类型不支持。如果携带有其他flags，直接返回失败。|
|*dest_addr|发送目的地址|-|
|addrlen|地址长度|-|

## 返回值

类型：ssize_t

- 非负数：实际发送的数据长度，表示成功

- -1：表示失败，并设置errno以指示错误类型

## 错误码

|错误码|描述|
|--|--|
|EAGAIN or EWOULDBLOCK|套接字被标记为非阻塞，请求的操作将阻塞。|
|ECONNRESET|连接被对端终止。|
|EDESTADDRREQ|套接字不是连接模式，也没有设置对端地址。|
|EFAULT|参数在用户的地址空间之外。|
|EINTR|被信号中断。|
|EINVAL|入参len与地址族不匹配。|
|EMSGSIZE|消息太大，无法一次发送，超过限制。|
|ENOMEM|内存申请失败。|
|ENOTCONN|套接字未连接。|
|EPIPE|套接字关闭写入，或者套接字为连接模式，不再连接。|
|EOPNOTSUPP|flags参数中的某些位不适合套接字类型，当前只支持MSG_DONTWAIT。|
|ENETUNREACH|网络上暂无可用路由。|
|EAFNOSUPPORT|所指定的地址对于所指定套接字的地址族而言，不是一个有效的地址。|
|ENETDOWN|用于到达目的地的本地网络接口已关闭。|
|ELIBBAD|系统符号加载失败。|
|EINVAL|套接字存在，但是套接字对应的数据结构存在异常。|
|EINVAL|入参len大于SSIZE_MAX。|
|EINVAL|共线程部署模式时，sockfd的worker id和当前线程的worker id不一致，即socket跨worker线程调用。|
