70 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
#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.
 | 
						|
\*=========================================================================*/
 | 
						|
#include <stdio.h>
 | 
						|
#include "lua.h"
 | 
						|
 | 
						|
#include "timeout.h"
 | 
						|
 | 
						|
namespace NS_SLUA {    
 | 
						|
 | 
						|
/* IO error codes */
 | 
						|
enum {
 | 
						|
    IO_DONE = 0,        /* operation completed successfully */
 | 
						|
    IO_TIMEOUT = -1,    /* operation timed out */
 | 
						|
    IO_CLOSED = -2,     /* the connection has been closed */
 | 
						|
	IO_UNKNOWN = -3     
 | 
						|
};
 | 
						|
 | 
						|
/* interface to error message function */
 | 
						|
typedef const char *(*p_error) (
 | 
						|
    void *ctx,          /* context needed by send */
 | 
						|
    int err             /* error code */
 | 
						|
);
 | 
						|
 | 
						|
/* interface to send function */
 | 
						|
typedef int (*p_send) (
 | 
						|
    void *ctx,          /* context needed by send */
 | 
						|
    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 */
 | 
						|
    p_timeout tm        /* timeout control */
 | 
						|
);
 | 
						|
 | 
						|
/* interface to recv function */
 | 
						|
typedef int (*p_recv) (
 | 
						|
    void *ctx,          /* context needed by recv */
 | 
						|
    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 */
 | 
						|
    p_timeout tm        /* timeout control */
 | 
						|
);
 | 
						|
 | 
						|
/* 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 */
 | 
						|
    p_error error;      /* strerror function */
 | 
						|
} t_io;
 | 
						|
typedef t_io *p_io;
 | 
						|
 | 
						|
void io_init(p_io io, p_send send, p_recv recv, p_error error, void *ctx);
 | 
						|
const char *io_strerror(int err);
 | 
						|
 | 
						|
} // end NS_SLUA
 | 
						|
 | 
						|
#endif /* IO_H */
 | 
						|
 |