81 lines
1.8 KiB
Markdown
81 lines
1.8 KiB
Markdown
# PR_Writev
|
|
|
|
Writes data to a socket from multiple buffers.
|
|
|
|
## Syntax
|
|
|
|
```{code}
|
|
#include <prio.h>
|
|
|
|
PRInt32 PR_Writev(
|
|
PRFileDesc *fd,
|
|
PRIOVec *iov,
|
|
PRInt32 size,
|
|
PRIntervalTime timeout);
|
|
|
|
#define PR_MAX_IOVECTOR_SIZE 16
|
|
```
|
|
|
|
### Parameters
|
|
|
|
The function has the following parameters:
|
|
|
|
`fd`
|
|
|
|
: A pointer to a {ref}`PRFileDesc` object for a socket.
|
|
|
|
`iov`
|
|
|
|
: An array of `PRIOVec` structures that describe the buffers to write
|
|
from.
|
|
|
|
`size`
|
|
|
|
: Number of `PRIOVec` structures in the `iov` array. The value of
|
|
this parameter must not be greater than `PR_MAX_IOVECTOR_SIZE`. If
|
|
it is, the function will fail and the error will be set to
|
|
`PR_BUFFER_OVERFLOW_ERROR`.
|
|
|
|
`timeout`
|
|
|
|
: A value of type {ref}`PRIntervalTime` describing the time limit for
|
|
completion of the entire write operation.
|
|
|
|
### Returns
|
|
|
|
One of the following values:
|
|
|
|
- A positive number indicates the number of bytes successfully written.
|
|
- The value -1 indicates that the operation failed. The reason for the
|
|
failure can be obtained by calling {ref}`PR_GetError`.
|
|
|
|
## Description
|
|
|
|
The thread calling {ref}`PR_Writev` blocks until all the data is written or
|
|
the write operation fails. Therefore, the return value is equal to
|
|
either the sum of all the buffer lengths (on success) or -1 (on
|
|
failure). Note that if {ref}`PR_Writev` returns -1, part of the data may
|
|
have been written before an error occurred. If the timeout parameter is
|
|
not `PR_INTERVAL_NO_TIMEOUT` and all the data cannot be written in the
|
|
specified interval, {ref}`PR_Writev` returns -1 with the error code
|
|
`PR_IO_TIMEOUT_ERROR`.
|
|
|
|
This is the type definition for `PRIOVec`:
|
|
|
|
```{code}
|
|
typedef struct PRIOVec {
|
|
char *iov_base;
|
|
int iov_len;
|
|
} PRIOVec;
|
|
```
|
|
|
|
The `PRIOVec` structure has the following fields:
|
|
|
|
`iov_base`
|
|
|
|
: A pointer to the beginning of the buffer.
|
|
|
|
`iov_len`
|
|
|
|
: The size of the buffer.
|