factor/native/port.h

50 lines
1.0 KiB
C
Raw Normal View History

2004-08-20 01:49:14 -04:00
#define BUF_SIZE (8 * 1024)
typedef enum {
PORT_READ,
PORT_RECV,
PORT_WRITE,
PORT_SPECIAL
} PORT_MODE;
2004-08-12 23:40:28 -04:00
typedef struct {
CELL header;
PORT_MODE type;
bool closed;
FIXNUM fd;
STRING* buffer;
2004-08-19 19:06:43 -04:00
/* top of buffer */
CELL buf_fill;
/* current read/write position */
CELL buf_pos;
2004-08-15 21:50:44 -04:00
/* tagged partial line used by read_line_fd */
CELL line;
2004-08-16 20:42:30 -04:00
/* is it ready to be returned? */
2004-08-19 20:48:41 -04:00
/* with the read# IO_TASK, this means that the operation is done */
2004-08-16 20:42:30 -04:00
bool line_ready;
2004-08-19 19:06:43 -04:00
2004-08-19 20:48:41 -04:00
/* count for read# */
FIXNUM count;
/* tagged client info used by accept_fd */
CELL client_host;
CELL client_port;
/* untagged fd of accepted connection */
CELL client_socket;
/* a pending I/O error or F */
CELL io_error;
} PORT;
PORT* untag_port(CELL tagged);
PORT* port(PORT_MODE type, CELL fd);
2004-08-20 01:49:14 -04:00
void init_line_buffer(PORT* port, FIXNUM count);
void fixup_port(PORT* port);
void collect_port(PORT* port);
void postpone_io_error(PORT* port, const char* func);
void io_error(const char* func);
void pending_io_error(PORT* port);
2004-09-02 21:51:19 -04:00
void primitive_pending_io_error(void);