开发者
资源
文档评分
获取效率
正确性
完整性
易理解
在线提单
论坛求助

knet_zwritev

接口名称

knet_zwritev(int sockfd, const struct knet_iovec *iov, int iovcnt);

接口描述

零拷贝写。

参数说明

参数说明备注
sockfd套接字文件描述符支持TCP,仅支持非阻塞模式。
*iov写缓冲区iov数组元素个数不小于iovcnt,iov的iov_base需要由knet_mp_alloc申请而来,iov的free_cb不能为空,若写失败,用户需要手动调用iov的free_cb,保证写缓冲区的正常释放。
iovcnt写缓冲区iov数量取值范围为[0, 1024]。

返回值

类型:ssize_t

  • 非负数:实际写入的数据长度,表示成功
  • -1:表示失败,并设置errno以指示错误类型

错误码

错误码描述
EAFNOSUPPORTK-NET TCP 模块未初始化。
EINVAL入参iovcnt小于0,或大于1024。
EFAULT入参iov为空指针。
EINVAL套接字存在,但是套接字对应的数据结构存在异常。
EINVAL共线程部署模式时,sockfd的worker id和当前线程的worker id不一致,即socket跨worker线程调用
EINVALiov的iov_len小于0;入参iov中iov_len之和大于SSIZE_MAX。
EFAULT输入iov的成员knet_iov_free_cb_t free_cb为空。
EINTR收到任何数据之前,函数调用被信号中断。
ENOTCONN连接已关闭。
ECONNRESET连接被拒绝。
EPIPE套接字关闭写入,或者套接字为连接模式,不再连接。
ENETDOWN用于到达目的地的本地网络接口已关闭。
ENOMEM内存申请失败。
EAGAIN发送缓冲区不足。