blob: 2d58933559efc05afa29588ec2cf6eefe027fd21 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
#ifndef OSTREAM_FILE_PRIVATE_H
#define OSTREAM_FILE_PRIVATE_H
#include "ostream-private.h"
struct file_ostream {
struct ostream_private ostream;
ssize_t (*writev)(struct file_ostream *fstream,
const struct const_iovec *iov,
unsigned int iov_count);
int fd;
struct io *io;
uoff_t buffer_offset;
uoff_t real_offset;
unsigned char *buffer; /* ring-buffer */
size_t buffer_size, optimal_block_size;
size_t head, tail; /* first unsent/unused byte */
bool full:1; /* if head == tail, is buffer empty or full? */
bool file:1;
bool flush_pending:1;
bool socket_cork_set:1;
bool no_socket_cork:1;
bool no_socket_nodelay:1;
bool no_socket_quickack:1;
bool no_sendfile:1;
bool autoclose_fd:1;
};
struct ostream *
o_stream_create_file_common(struct file_ostream *fstream,
int fd, size_t max_buffer_size, bool autoclose_fd);
ssize_t o_stream_file_writev(struct file_ostream *fstream,
const struct const_iovec *iov,
unsigned int iov_size);
ssize_t o_stream_file_sendv(struct ostream_private *stream,
const struct const_iovec *iov,
unsigned int iov_count);
void o_stream_file_close(struct iostream_private *stream,
bool close_parent);
#endif
|