# PR_Writev Writes data to a socket from multiple buffers. ## Syntax ```{code} #include 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.