blob: d1d2b0ef7328f93162bc44a2c35677fd89b9fcb0 (
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
#ifndef _NBBIO_H_INCLUDED_
#define _NBBIO_H_INCLUDED_
/*++
/* NAME
/* nbbio 3h
/* SUMMARY
/* non-blocking buffered I/O
/* SYNOPSIS
/* #include "nbbio.h"
/* DESCRIPTION
/* .nf
/*
* Utility library.
*/
#include <events.h> /* Needed for EVENT_READ etc. */
/*
* External interface. All structure members are private.
*/
typedef void (*NBBIO_ACTION) (int, void *);
typedef struct {
int fd; /* socket file descriptor */
ssize_t bufsize; /* read/write buffer size */
char *label; /* diagnostics */
NBBIO_ACTION action; /* call-back routine */
void *context; /* call-back context */
int flags; /* buffer-pair status */
char *read_buf; /* start of buffer */
ssize_t read_pend; /* nr of unread bytes */
char *write_buf; /* start of buffer */
ssize_t write_pend; /* nr of unwritten bytes */
} NBBIO;
#define NBBIO_FLAG_READ (1<<0)
#define NBBIO_FLAG_WRITE (1<<1)
#define NBBIO_FLAG_EOF (1<<2)
#define NBBIO_FLAG_ERROR (1<<3)
#define NBBIO_FLAG_TIMEOUT (1<<4)
#define NBBIO_OP_NAME(np) \
(((np)->flags & NBBIO_FLAG_READ) ? "read" : \
((np)->flags & NBBIO_FLAG_WRITE) ? "write" : \
"unknown")
#define NBBIO_MASK_ACTIVE \
(NBBIO_FLAG_READ | NBBIO_FLAG_WRITE)
#define NBBIO_MASK_ERROR \
(NBBIO_FLAG_EOF | NBBIO_FLAG_ERROR | NBBIO_FLAG_TIMEOUT)
#define NBBIO_BUFSIZE(np) (((np)->bufsize) + 0) /* Read-only */
#define NBBIO_READ_PEND(np) ((np)->read_pend)
#define NBBIO_READ_BUF(np) ((np)->read_buf + 0) /* Read-only */
#define NBBIO_WRITE_PEND(np) ((np)->write_pend)
#define NBBIO_WRITE_BUF(np) ((np)->write_buf + 0) /* Read-only */
#define NBBIO_ACTIVE_FLAGS(np) ((np)->flags & NBBIO_MASK_ACTIVE)
#define NBBIO_ERROR_FLAGS(np) ((np)->flags & NBBIO_MASK_ERROR)
extern NBBIO *nbbio_create(int, ssize_t, const char *, NBBIO_ACTION, void *);
extern void nbbio_free(NBBIO *);
extern void nbbio_enable_read(NBBIO *, int);
extern void nbbio_enable_write(NBBIO *, int);
extern void nbbio_disable_readwrite(NBBIO *);
extern void nbbio_slumber(NBBIO *, int);
/* LICENSE
/* .ad
/* .fi
/* The Secure Mailer license must be distributed with this software.
/* AUTHOR(S)
/* Wietse Venema
/* IBM T.J. Watson Research
/* P.O. Box 704
/* Yorktown Heights, NY 10598, USA
/*--*/
#endif
|