diff --git a/include/empio.h b/include/empio.h index 36050477..70237ebc 100644 --- a/include/empio.h +++ b/include/empio.h @@ -37,7 +37,6 @@ #define IO_READ 0x1 #define IO_WRITE 0x2 -#define IO_NBLOCK 0x8 #define IO_EOF 0x10 #define IO_ERROR 0x40 @@ -48,7 +47,6 @@ extern struct iop *io_open(int, int, int, struct timeval); extern void io_init(void); -extern int io_noblocking(struct iop *, int); extern void io_close(struct iop *); extern int io_input(struct iop *, int); extern int io_inputwaiting(struct iop *); diff --git a/src/lib/empthread/io.c b/src/lib/empthread/io.c index 13d75ad7..5a50043b 100644 --- a/src/lib/empthread/io.c +++ b/src/lib/empthread/io.c @@ -73,27 +73,33 @@ io_init(void) struct iop * io_open(int fd, int flags, int bufsize, struct timeval timeout) { + int fdfl; struct iop *iop; - flags = flags & (IO_READ | IO_WRITE | IO_NBLOCK); + flags = flags & (IO_READ | IO_WRITE); if ((flags & (IO_READ | IO_WRITE)) == 0) return NULL; + + fdfl = fcntl(fd, F_GETFL, 0); + if (fdfl < 0) + return NULL; + fdfl |= O_NONBLOCK; + if (fcntl(fd, F_SETFL, fdfl) < 0) + return NULL; + iop = malloc(sizeof(struct iop)); if (!iop) return NULL; iop->fd = fd; iop->input = NULL; iop->output = NULL; - iop->flags = 0; - iop->input_timeout = timeout; + iop->flags = flags; iop->bufsize = bufsize; + iop->input_timeout = timeout; if (flags & IO_READ) iop->input = ioq_create(bufsize); if (flags & IO_WRITE) iop->output = ioq_create(bufsize); - if (flags & IO_NBLOCK) - io_noblocking(iop, 1); /* FIXME check success */ - iop->flags = flags; return iop; } @@ -328,27 +334,6 @@ io_shutdown(struct iop *iop, int flags) return 0; } -int -io_noblocking(struct iop *iop, int value) -{ - int flags; - - flags = fcntl(iop->fd, F_GETFL, 0); - if (flags < 0) - return -1; - if (value == 0) - flags &= ~O_NONBLOCK; - else - flags |= O_NONBLOCK; - if (fcntl(iop->fd, F_SETFL, flags) < 0) - return -1; - if (value == 0) - iop->flags &= ~IO_NBLOCK; - else - iop->flags |= IO_NBLOCK; - return 0; -} - int io_error(struct iop *iop) { diff --git a/src/lib/player/accept.c b/src/lib/player/accept.c index 321e21bb..63891487 100644 --- a/src/lib/player/accept.c +++ b/src/lib/player/accept.c @@ -82,8 +82,7 @@ player_new(int s) idle_timeout.tv_usec = 0 ; if (s >= 0) { /* real player, not dummy created by update and market update */ - lp->iop = io_open(s, IO_READ | IO_WRITE | IO_NBLOCK, IO_BUFSIZE, - idle_timeout); + lp->iop = io_open(s, IO_READ | IO_WRITE, IO_BUFSIZE, idle_timeout); if (!lp->iop) { free(lp); return NULL;