luasocket/src/io.h

71 lines
2.2 KiB
C
Raw Normal View History

2003-05-25 03:54:13 +02:00
#ifndef IO_H
#define IO_H
/*=========================================================================*\
* Input/Output abstraction
* LuaSocket toolkit
*
* This module defines the interface that LuaSocket expects from the
* transport layer for streamed input/output. The idea is that if any
* transport implements this interface, then the buffer.c functions
* automatically work on it.
*
* The module socket.h implements this interface, and thus the module tcp.h
* is very simple.
\*=========================================================================*/
2019-02-28 04:57:25 +01:00
#include "luasocket.h"
2004-07-01 05:32:09 +02:00
#include "timeout.h"
/* IO error codes */
enum {
2004-07-15 08:11:53 +02:00
IO_DONE = 0, /* operation completed successfully */
IO_TIMEOUT = -1, /* operation timed out */
IO_CLOSED = -2, /* the connection has been closed */
IO_UNKNOWN = -3
};
2003-05-25 03:54:13 +02:00
2004-07-15 08:11:53 +02:00
/* interface to error message function */
typedef const char *(*p_error) (
void *ctx, /* context needed by send */
2004-07-15 08:11:53 +02:00
int err /* error code */
);
2003-05-25 03:54:13 +02:00
/* interface to send function */
typedef int (*p_send) (
void *ctx, /* context needed by send */
2003-05-25 03:54:13 +02:00
const char *data, /* pointer to buffer with data to send */
size_t count, /* number of bytes to send from buffer */
size_t *sent, /* number of bytes sent uppon return */
2005-10-07 06:40:59 +02:00
p_timeout tm /* timeout control */
2004-07-01 05:32:09 +02:00
);
2003-05-25 03:54:13 +02:00
/* interface to recv function */
typedef int (*p_recv) (
void *ctx, /* context needed by recv */
2003-05-25 03:54:13 +02:00
char *data, /* pointer to buffer where data will be writen */
size_t count, /* number of bytes to receive into buffer */
size_t *got, /* number of bytes received uppon return */
2005-10-07 06:40:59 +02:00
p_timeout tm /* timeout control */
2003-05-25 03:54:13 +02:00
);
/* IO driver definition */
typedef struct t_io_ {
void *ctx; /* context needed by send/recv */
p_send send; /* send function pointer */
p_recv recv; /* receive function pointer */
2004-07-15 08:11:53 +02:00
p_error error; /* strerror function */
2003-05-25 03:54:13 +02:00
} t_io;
typedef t_io *p_io;
#ifndef _WIN32
2019-02-28 04:57:25 +01:00
#pragma GCC visibility push(hidden)
#endif
2019-02-28 04:57:25 +01:00
2004-07-15 08:11:53 +02:00
void io_init(p_io io, p_send send, p_recv recv, p_error error, void *ctx);
const char *io_strerror(int err);
2003-05-25 03:54:13 +02:00
#ifndef _WIN32
2019-02-28 04:57:25 +01:00
#pragma GCC visibility pop
#endif
2019-02-28 04:57:25 +01:00
2004-07-26 06:03:55 +02:00
#endif /* IO_H */