Remove blocking struct iop operation

The blocking I/O option makes no sense in the server, because it
blocks the server process instead of the thread.  In fact, it's been
unused since Empire 2, except for one place, where it was used
incorrectly, and got removed in the previous commit.

Make I/O non-blocking in io_open() unconditionally.  Remove IO_NBLOCK
and io_noblocking().
This commit is contained in:
Markus Armbruster 2009-04-22 20:16:13 +02:00
parent 70bc528d0d
commit 3805548b3e
3 changed files with 13 additions and 31 deletions

View file

@ -37,7 +37,6 @@
#define IO_READ 0x1 #define IO_READ 0x1
#define IO_WRITE 0x2 #define IO_WRITE 0x2
#define IO_NBLOCK 0x8
#define IO_EOF 0x10 #define IO_EOF 0x10
#define IO_ERROR 0x40 #define IO_ERROR 0x40
@ -48,7 +47,6 @@
extern struct iop *io_open(int, int, int, struct timeval); extern struct iop *io_open(int, int, int, struct timeval);
extern void io_init(void); extern void io_init(void);
extern int io_noblocking(struct iop *, int);
extern void io_close(struct iop *); extern void io_close(struct iop *);
extern int io_input(struct iop *, int); extern int io_input(struct iop *, int);
extern int io_inputwaiting(struct iop *); extern int io_inputwaiting(struct iop *);

View file

@ -73,27 +73,33 @@ io_init(void)
struct iop * struct iop *
io_open(int fd, int flags, int bufsize, struct timeval timeout) io_open(int fd, int flags, int bufsize, struct timeval timeout)
{ {
int fdfl;
struct iop *iop; struct iop *iop;
flags = flags & (IO_READ | IO_WRITE | IO_NBLOCK); flags = flags & (IO_READ | IO_WRITE);
if ((flags & (IO_READ | IO_WRITE)) == 0) if ((flags & (IO_READ | IO_WRITE)) == 0)
return NULL; 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)); iop = malloc(sizeof(struct iop));
if (!iop) if (!iop)
return NULL; return NULL;
iop->fd = fd; iop->fd = fd;
iop->input = NULL; iop->input = NULL;
iop->output = NULL; iop->output = NULL;
iop->flags = 0; iop->flags = flags;
iop->input_timeout = timeout;
iop->bufsize = bufsize; iop->bufsize = bufsize;
iop->input_timeout = timeout;
if (flags & IO_READ) if (flags & IO_READ)
iop->input = ioq_create(bufsize); iop->input = ioq_create(bufsize);
if (flags & IO_WRITE) if (flags & IO_WRITE)
iop->output = ioq_create(bufsize); iop->output = ioq_create(bufsize);
if (flags & IO_NBLOCK)
io_noblocking(iop, 1); /* FIXME check success */
iop->flags = flags;
return iop; return iop;
} }
@ -328,27 +334,6 @@ io_shutdown(struct iop *iop, int flags)
return 0; 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 int
io_error(struct iop *iop) io_error(struct iop *iop)
{ {

View file

@ -82,8 +82,7 @@ player_new(int s)
idle_timeout.tv_usec = 0 ; idle_timeout.tv_usec = 0 ;
if (s >= 0) { if (s >= 0) {
/* real player, not dummy created by update and market update */ /* real player, not dummy created by update and market update */
lp->iop = io_open(s, IO_READ | IO_WRITE | IO_NBLOCK, IO_BUFSIZE, lp->iop = io_open(s, IO_READ | IO_WRITE, IO_BUFSIZE, idle_timeout);
idle_timeout);
if (!lp->iop) { if (!lp->iop) {
free(lp); free(lp);
return NULL; return NULL;