diff options
| author | Dimitri Staessens <dimitri.staessens@ugent.be> | 2017-10-30 13:01:25 +0100 |
|---|---|---|
| committer | Sander Vrijders <sander.vrijders@ugent.be> | 2017-10-30 13:54:02 +0100 |
| commit | 81cc401a4ef05a6bc5bcbda5ad27f8a60706aa02 (patch) | |
| tree | 8f3e48b2b37d79d737afc83c403eaaa86e14b59e | |
| parent | f9cf89d54f0d1661fd78f778d0bdb4812f3bd460 (diff) | |
| download | ouroboros-81cc401a4ef05a6bc5bcbda5ad27f8a60706aa02.zip ouroboros-81cc401a4ef05a6bc5bcbda5ad27f8a60706aa02.tar.gz | |
dev: Split nonblocking read and write
The FLOWFNONBLOCK flag now has two subflags FLOWFRNOBLOCK and
FLOWFWNOBLOCK which allows setting the behavior of read and write
independently. The default behavior is unchanged (blocking read and
write).
Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be>
Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
| -rw-r--r-- | doc/man/fccntl.3 | 6 | ||||
| -rw-r--r-- | include/ouroboros/fccntl.h | 5 | ||||
| -rw-r--r-- | src/lib/dev.c | 4 |
3 files changed, 11 insertions, 4 deletions
diff --git a/doc/man/fccntl.3 b/doc/man/fccntl.3 index ac28aef..ad1860e 100644 --- a/doc/man/fccntl.3 +++ b/doc/man/fccntl.3 @@ -52,7 +52,11 @@ argument. Supported flags are: \fIFLOWFDOWN\fR - mark flow as down. -\fIFLOWFNONBLOCK\fR - set I/O to non-blocking. +\fIFLOWFRNOBLOCK\fR - set read to non-blocking. + +\fIFLOWFWNOBLOCK\fR - set write to non-blocking. + +\fIFLOWFNONBLOCK\fR - set I/O to non-blocking read/write. \fIFLOWFDEFAULT\fR - set flow defaults (blocking, read-write). diff --git a/include/ouroboros/fccntl.h b/include/ouroboros/fccntl.h index 3bd09e6..afaff8f 100644 --- a/include/ouroboros/fccntl.h +++ b/include/ouroboros/fccntl.h @@ -35,7 +35,10 @@ #define FLOWFDOWN 00000004 /* Flow is down */ -#define FLOWFNONBLOCK 00004000 /* Non-blocking flow */ +#define FLOWFRNOBLOCK 00001000 /* Non-blocking read */ +#define FLOWFWNOBLOCK 00002000 /* Non-blocking write */ +#define FLOWFNONBLOCK 00003000 /* Non-blocking rw */ + #define FLOWFDEFAULT 00000002 /* Default, blocking, rw */ #define FLOWFINVALID (FLOWFWRONLY | FLOWFRDWR) diff --git a/src/lib/dev.c b/src/lib/dev.c index 11ab645..28a99bc 100644 --- a/src/lib/dev.c +++ b/src/lib/dev.c @@ -430,7 +430,7 @@ static ssize_t frcti_read(int fd) pthread_rwlock_rdlock(&ai.lock); - noblock = ai.flows[fd].oflags & FLOWFNONBLOCK; + noblock = ai.flows[fd].oflags & FLOWFRNOBLOCK; rb = ai.flows[fd].rx_rb; if (ai.flows[fd].rcv_timesout) { @@ -1096,7 +1096,7 @@ ssize_t flow_write(int fd, return -EPERM; } - if (ai.flows[fd].oflags & FLOWFNONBLOCK) { + if (ai.flows[fd].oflags & FLOWFWNOBLOCK) { idx = shm_rdrbuff_write(ai.rdrb, DU_BUFF_HEADSPACE, DU_BUFF_TAILSPACE, |
