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 */
21enum {
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 */
29typedef const char *(*p_error) (
30 void *ctx, /* context needed by send */
31 int err /* error code */
32);
33
34/* interface to send function */
35typedef 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 */
44typedef 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 */
53typedef 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;
59typedef t_io *p_io;
60
61void io_init(p_io io, p_send send, p_recv recv, p_error error, void *ctx);
62const char *io_strerror(int err);
63
64#endif /* IO_H */
65
66