tor  0.4.1.0-alpha-dev
Macros | Functions
buffers_net.c File Reference
#include "lib/net/buffers_net.h"
#include "lib/buf/buffers.h"
#include "lib/log/log.h"
#include "lib/log/util_bug.h"
#include "lib/net/nettypes.h"
#include <stdlib.h>

Go to the source code of this file.

Macros

#define BUFFERS_PRIVATE
 
#define check()   STMT_NIL
 

Functions

static int read_to_chunk (buf_t *buf, chunk_t *chunk, tor_socket_t fd, size_t at_most, int *reached_eof, int *error, bool is_socket)
 
static int buf_read_from_fd (buf_t *buf, int fd, size_t at_most, int *reached_eof, int *socket_error, bool is_socket)
 
static int flush_chunk (tor_socket_t fd, buf_t *buf, chunk_t *chunk, size_t sz, size_t *buf_flushlen, bool is_socket)
 
static int buf_flush_to_fd (buf_t *buf, int fd, size_t sz, size_t *buf_flushlen, bool is_socket)
 
int buf_flush_to_socket (buf_t *buf, tor_socket_t s, size_t sz, size_t *buf_flushlen)
 
int buf_read_from_socket (buf_t *buf, tor_socket_t s, size_t at_most, int *reached_eof, int *socket_error)
 
int buf_flush_to_pipe (buf_t *buf, int fd, size_t sz, size_t *buf_flushlen)
 
int buf_read_from_pipe (buf_t *buf, int fd, size_t at_most, int *reached_eof, int *socket_error)
 

Detailed Description

Read and write data on a buf_t object.

Definition in file buffers_net.c.

Function Documentation

◆ buf_flush_to_fd()

static int buf_flush_to_fd ( buf_t *  buf,
int  fd,
size_t  sz,
size_t *  buf_flushlen,
bool  is_socket 
)
static

Write data from buf to the file descriptor fd. Write at most sz bytes, decrement *buf_flushlen by the number of bytes actually written, and remove the written bytes from the buffer. Return the number of bytes written on success, -1 on failure. Return 0 if write() would block.

Definition at line 185 of file buffers_net.c.

References SOCKET_OK, and tor_assert().

Referenced by buf_flush_to_pipe(), and buf_flush_to_socket().

◆ buf_flush_to_pipe()

int buf_flush_to_pipe ( buf_t *  buf,
int  fd,
size_t  sz,
size_t *  buf_flushlen 
)

Write data from buf to the pipe fd. Write at most sz bytes, decrement *buf_flushlen by the number of bytes actually written, and remove the written bytes from the buffer. Return the number of bytes written on success, -1 on failure. Return 0 if write() would block.

Definition at line 257 of file buffers_net.c.

References buf_flush_to_fd().

◆ buf_flush_to_socket()

int buf_flush_to_socket ( buf_t *  buf,
tor_socket_t  s,
size_t  sz,
size_t *  buf_flushlen 
)

Write data from buf to the socket s. Write at most sz bytes, decrement *buf_flushlen by the number of bytes actually written, and remove the written bytes from the buffer. Return the number of bytes written on success, -1 on failure. Return 0 if write() would block.

Definition at line 231 of file buffers_net.c.

References buf_flush_to_fd().

◆ buf_read_from_fd()

static int buf_read_from_fd ( buf_t *  buf,
int  fd,
size_t  at_most,
int *  reached_eof,
int *  socket_error,
bool  is_socket 
)
static

Read from file descriptor fd, writing onto end of buf. Read at most at_most bytes, growing the buffer as necessary. If recv() returns 0 (because of EOF), set *reached_eof to 1 and return 0. Return -1 on error; else return the number of bytes read.

Definition at line 91 of file buffers_net.c.

Referenced by buf_read_from_pipe(), and buf_read_from_socket().

◆ buf_read_from_pipe()

int buf_read_from_pipe ( buf_t *  buf,
int  fd,
size_t  at_most,
int *  reached_eof,
int *  socket_error 
)

Read from pipe fd, writing onto end of buf. Read at most at_most bytes, growing the buffer as necessary. If read() returns 0 (because of EOF), set *reached_eof to 1 and return 0. Return -1 on error; else return the number of bytes read.

Definition at line 269 of file buffers_net.c.

References buf_read_from_fd().

Referenced by process_unix_read_handle().

◆ buf_read_from_socket()

int buf_read_from_socket ( buf_t *  buf,
tor_socket_t  s,
size_t  at_most,
int *  reached_eof,
int *  socket_error 
)

Read from socket s, writing onto end of buf. Read at most at_most bytes, growing the buffer as necessary. If recv() returns 0 (because of EOF), set *reached_eof to 1 and return 0. Return -1 on error; else return the number of bytes read.

Definition at line 243 of file buffers_net.c.

References buf_read_from_fd().

◆ flush_chunk()

static int flush_chunk ( tor_socket_t  fd,
buf_t *  buf,
chunk_t *  chunk,
size_t  sz,
size_t *  buf_flushlen,
bool  is_socket 
)
inlinestatic

Helper for buf_flush_to_socket(): try to write sz bytes from chunk chunk of buffer buf onto file descriptor fd. On success, deduct the bytes written from *buf_flushlen. Return the number of bytes written on success, 0 on blocking, -1 on failure.

Definition at line 145 of file buffers_net.c.

◆ read_to_chunk()

static int read_to_chunk ( buf_t *  buf,
chunk_t *  chunk,
tor_socket_t  fd,
size_t  at_most,
int *  reached_eof,
int *  error,
bool  is_socket 
)
inlinestatic

Read up to at_most bytes from the file descriptor fd into chunk (which must be on buf). If we get an EOF, set *reached_eof to 1. Uses tor_socket_recv() iff is_socket is true, otherwise it uses read(). Return -1 on error (and sets *error to errno), 0 on eof or blocking, and the number of bytes read otherwise.

Definition at line 44 of file buffers_net.c.