PR_Writev

从多个缓冲区将数据写入套接字。

语法

#include <prio.h>

PRInt32 PR_Writev(
  PRFileDesc *fd,
  PRIOVec *iov,
  PRInt32 size,
  PRIntervalTime timeout);

#define PR_MAX_IOVECTOR_SIZE 16

参数

该函数具有以下参数

fd

指向套接字的 PRFileDesc 对象的指针。

iov

一个 PRIOVec 结构数组,描述要从中写入的缓冲区。

size

iov 数组中 PRIOVec 结构的数量。此参数的值不得大于 PR_MAX_IOVECTOR_SIZE。如果超过,则函数将失败,错误将设置为 PR_BUFFER_OVERFLOW_ERROR

timeout

一个类型为 PRIntervalTime 的值,描述整个写入操作完成的时间限制。

返回值

以下值之一

  • 正数表示成功写入的字节数。

  • 值 -1 表示操作失败。可以通过调用 PR_GetError 获取失败的原因。

描述

调用 PR_Writev 的线程会阻塞,直到所有数据写入完成或写入操作失败。因此,返回值等于所有缓冲区长度的总和(成功时)或 -1(失败时)。请注意,如果 PR_Writev 返回 -1,则部分数据可能在发生错误之前已写入。如果 timeout 参数不是 PR_INTERVAL_NO_TIMEOUT 并且所有数据无法在指定的时间间隔内写入,则 PR_Writev 返回 -1,错误代码为 PR_IO_TIMEOUT_ERROR

这是 PRIOVec 的类型定义

typedef struct PRIOVec {
  char *iov_base;
  int iov_len;
} PRIOVec;

PRIOVec 结构具有以下字段

iov_base

指向缓冲区开头的指针。

iov_len

缓冲区的大小。