1 #ifndef IO_H
2 #define IO_H
3 /*=========================================================================*\
4 * Input/Output abstraction
5 * LuaSocket toolkit
6 *
7 * This module defines the interface that LuaSocket expects from the
8 * transport layer for streamed input/output. The idea is that if any
9 * transport implements this interface, then the buffer.c functions
10 * automatically work on it.
11 *
12 * The module socket.h implements this interface, and thus the module tcp.h
13 * is very simple.
14 \*=========================================================================*/
15 #include <stdio.h>
16 #include "lua.h"
17 
18 #include "timeout.h"
19 
20 /* IO error codes */
21 enum {
22     IO_DONE = 0,        /* operation completed successfully */
23     IO_TIMEOUT = -1,    /* operation timed out */
24     IO_CLOSED = -2,     /* the connection has been closed */
25 	IO_UNKNOWN = -3
26 };
27 
28 /* interface to error message function */
29 typedef const char *(*p_error) (
30     void *ctx,          /* context needed by send */
31     int err             /* error code */
32 );
33 
34 /* interface to send function */
35 typedef int (*p_send) (
36     void *ctx,          /* context needed by send */
37     const char *data,   /* pointer to buffer with data to send */
38     size_t count,       /* number of bytes to send from buffer */
39     size_t *sent,       /* number of bytes sent uppon return */
40     p_timeout tm        /* timeout control */
41 );
42 
43 /* interface to recv function */
44 typedef int (*p_recv) (
45     void *ctx,          /* context needed by recv */
46     char *data,         /* pointer to buffer where data will be writen */
47     size_t count,       /* number of bytes to receive into buffer */
48     size_t *got,        /* number of bytes received uppon return */
49     p_timeout tm        /* timeout control */
50 );
51 
52 /* IO driver definition */
53 typedef struct t_io_ {
54     void *ctx;          /* context needed by send/recv */
55     p_send send;        /* send function pointer */
56     p_recv recv;        /* receive function pointer */
57     p_error error;      /* strerror function */
58 } t_io;
59 typedef t_io *p_io;
60 
61 void io_init(p_io io, p_send send, p_recv recv, p_error error, void *ctx);
62 const char *io_strerror(int err);
63 
64 #endif /* IO_H */
65 
66