added hak_errbint_t and hak_erruinf_t and related functions enhanced the wchar_t detection for wide_char yes:4w
		
			
				
	
	
		
			635 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			635 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|     Copyright (c) 2016-2018 Chung, Hyung-Hwan. All rights reserved.
 | |
| 
 | |
|     Redistribution and use in source and binary forms, with or without
 | |
|     modification, are permitted provided that the following conditions
 | |
|     are met:
 | |
|     1. Redistributions of source code must retain the above copyright
 | |
|        notice, this list of conditions and the following disclaimer.
 | |
|     2. Redistributions in binary form must reproduce the above copyright
 | |
|        notice, this list of conditions and the following disclaimer in the
 | |
|        documentation and/or other materials provided with the distribution.
 | |
| 
 | |
|     THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
 | |
|     IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 | |
|     OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 | |
|     IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
 | |
|     INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 | |
|     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 | |
|     DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 | |
|     THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | |
|     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 | |
|     THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | |
|  */
 | |
| 
 | |
| #ifndef _HAK_X_T_
 | |
| #define _HAK_X_T_
 | |
| 
 | |
| #include <hak.h>
 | |
| #include <sys/uio.h>
 | |
| 
 | |
| enum hak_xpkt_type_t
 | |
| {
 | |
| 	/* the actual type field is 4 bits long. up to 16 types are possible */
 | |
| 
 | |
| 	HAK_XPKT_CODE,      /* [C]->[S] input code */
 | |
| 	HAK_XPKT_EXECUTE,   /* [C]->[S] command to execute the code input */
 | |
| 
 | |
| 	HAK_XPKT_ERROR,     /* [S]->[C] error indicator */
 | |
| 	HAK_XPKT_RETVAL,    /* [S]->[C] return value */
 | |
| 
 | |
| 	HAK_XPKT_STDIN,     /* [C]->[S] */
 | |
| 	HAK_XPKT_STDOUT,    /* [S]->[C] output to stdout */
 | |
| 	HAK_XPKT_STDERR,    /* [S]->[C] output to stderr or output data related to error */
 | |
| 
 | |
| 	HAK_XPKT_INFORM,    /* [S]->[C], [C]->[S] */
 | |
| 
 | |
| 	/*TODO: define HAK_XPKT_CONTROL and make LIST_WORKS AND KILL_WORKER sub-commands of CONTORL */
 | |
| 	HAK_XPKT_LIST_WORKERS, /* [C]->[S] */
 | |
| 	HAK_XPKT_KILL_WORKER,  /* [C]->[S] */
 | |
| 
 | |
| 	HAK_XPKT_DISCONNECT    /* [C]->[S], [S]->[C] */
 | |
| };
 | |
| typedef enum hak_xpkt_type_t hak_xpkt_type_t;
 | |
| 
 | |
| #include "hak-pac1.h"
 | |
| struct hak_xpkt_hdr_t
 | |
| {
 | |
| 	hak_uint8_t id;
 | |
| 	hak_uint8_t type; /* lower 4 bits represent the actual type.
 | |
| 	                     the upper 4 bits are part of the length extending the length to 12 bits */
 | |
| 	hak_uint8_t len;
 | |
| };
 | |
| typedef struct hak_xpkt_hdr_t hak_xpkt_hdr_t;
 | |
| #include "hak-upac.h"
 | |
| 
 | |
| #define HAK_XPKT_HDR_LEN (HAK_SIZEOF(hak_xpkt_hdr_t))
 | |
| 
 | |
| /* the actual length field is 12 bits long. so the maximum payload length allowed per packet is 2^12 - 1 */
 | |
| #define HAK_XPKT_MAX_PLD_LEN (4095)
 | |
| 
 | |
| /* ---------------------------------------------------------------------- */
 | |
| 
 | |
| typedef struct hak_xproto_t hak_xproto_t;
 | |
| 
 | |
| typedef int (*hak_xproto_cb_on_packet) (
 | |
| 	hak_xproto_t*   proto,
 | |
| 	hak_xpkt_type_t type,
 | |
| 	const void*     data,
 | |
| 	hak_oow_t       len
 | |
| );
 | |
| 
 | |
| struct hak_xproto_cb_t
 | |
| {
 | |
| 	hak_xproto_cb_on_packet on_packet;
 | |
| };
 | |
| typedef struct hak_xproto_cb_t hak_xproto_cb_t;
 | |
| 
 | |
| /* ---------------------------------------------------------------------- */
 | |
| 
 | |
| /* forward declaration to skip including <sys/uio.h> just for struct iovec */
 | |
| typedef struct iovec hak_iovec_t;
 | |
| 
 | |
| /* ---------------------------------------------------------------------- */
 | |
| 
 | |
| typedef struct hak_server_proto_t hak_server_proto_t;
 | |
| typedef struct hak_server_worker_t hak_server_worker_t;
 | |
| typedef struct hak_server_t hak_server_t;
 | |
| 
 | |
| enum hak_server_option_t
 | |
| {
 | |
| 	HAK_SERVER_TRAIT,
 | |
| 	HAK_SERVER_LOG_MASK,
 | |
| 	HAK_SERVER_WORKER_MAX_COUNT,
 | |
| 	HAK_SERVER_WORKER_STACK_SIZE,
 | |
| 	HAK_SERVER_WORKER_IDLE_TIMEOUT,
 | |
| 	HAK_SERVER_ACTOR_HEAP_SIZE,
 | |
| 	HAK_SERVER_ACTOR_MAX_RUNTIME,
 | |
| 	HAK_SERVER_SCRIPT_INCLUDE_PATH,
 | |
| 	HAK_SERVER_MODULE_INCTX
 | |
| };
 | |
| typedef enum hak_server_option_t hak_server_option_t;
 | |
| 
 | |
| enum hak_server_trait_t
 | |
| {
 | |
| #if defined(HAK_BUILD_DEBUG)
 | |
| 	HAK_SERVER_TRAIT_DEBUG_GC         = (1 << 0),
 | |
| 	HAK_SERVER_TRAIT_DEBUG_BIGINT     = (1 << 1)
 | |
| #endif
 | |
| };
 | |
| typedef enum hak_server_trait_t hak_server_trait_t;
 | |
| 
 | |
| #define HAK_SERVER_WID_INVALID ((hak_oow_t)-1)
 | |
| #define HAK_SERVER_WID_MAX (HAK_SERVER_WID_INVALID - 1)
 | |
| 
 | |
| typedef void (*hak_server_log_write_t) (
 | |
| 	hak_server_t*     server,
 | |
| 	hak_oow_t         wid,
 | |
| 	hak_bitmask_t     mask,
 | |
| 	const hak_ooch_t* msg,
 | |
| 	hak_oow_t         len
 | |
| );
 | |
| 
 | |
| struct hak_server_prim_t
 | |
| {
 | |
| 	hak_server_log_write_t log_write;
 | |
| };
 | |
| typedef struct hak_server_prim_t hak_server_prim_t;
 | |
| 
 | |
| 
 | |
| /* ---------------------------------------------------------------------- */
 | |
| 
 | |
| 
 | |
| typedef struct hak_client_t hak_client_t;
 | |
| 
 | |
| enum hak_client_option_t
 | |
| {
 | |
| 	HAK_CLIENT_TRAIT,
 | |
| 	HAK_CLIENT_LOG_MASK,
 | |
| };
 | |
| typedef enum hak_client_option_t hak_client_option_t;
 | |
| 
 | |
| enum hak_client_trait_t
 | |
| {
 | |
| 	/* no trait defined at this moment. XXXX is just a placeholder */
 | |
| 	HAK_CLIENT_XXXX  = (1 << 0)
 | |
| };
 | |
| typedef enum hak_client_trait_t hak_client_trait_t;
 | |
| 
 | |
| 
 | |
| typedef void (*hak_client_log_write_t) (
 | |
| 	hak_client_t*     client,
 | |
| 	hak_bitmask_t     mask,
 | |
| 	const hak_ooch_t* msg,
 | |
| 	hak_oow_t         len
 | |
| );
 | |
| 
 | |
| typedef int (*hak_client_on_packet_t) (
 | |
| 	hak_client_t*   client,
 | |
| 	hak_xpkt_type_t type,
 | |
| 	const void*     data,
 | |
| 	hak_oow_t       len
 | |
| );
 | |
| 
 | |
| struct hak_client_prim_t
 | |
| {
 | |
| 	hak_client_log_write_t     log_write;
 | |
| 	hak_client_on_packet_t     on_packet;
 | |
| };
 | |
| typedef struct hak_client_prim_t hak_client_prim_t;
 | |
| 
 | |
| 
 | |
| /* ---------------------------------------------------------------------- */
 | |
| 
 | |
| #if (HAK_SIZEOF_SOCKLEN_T == 1)
 | |
| 	#if defined(HAK_SOCKLEN_T_IS_SIGNED)
 | |
| 		typedef hak_int8_t hak_scklen_t;
 | |
| 	#else
 | |
| 		typedef hak_uint8_t hak_scklen_t;
 | |
| 	#endif
 | |
| #elif (HAK_SIZEOF_SOCKLEN_T == 2)
 | |
| 	#if defined(HAK_SOCKLEN_T_IS_SIGNED)
 | |
| 		typedef hak_int16_t hak_scklen_t;
 | |
| 	#else
 | |
| 		typedef hak_uint16_t hak_scklen_t;
 | |
| 	#endif
 | |
| #elif (HAK_SIZEOF_SOCKLEN_T == 4)
 | |
| 	#if defined(HAK_SOCKLEN_T_IS_SIGNED)
 | |
| 		typedef hak_int32_t hak_scklen_t;
 | |
| 	#else
 | |
| 		typedef hak_uint32_t hak_scklen_t;
 | |
| 	#endif
 | |
| #elif (HAK_SIZEOF_SOCKLEN_T == 8)
 | |
| 	#if defined(HAK_SOCKLEN_T_IS_SIGNED)
 | |
| 		typedef hak_int64_t hak_scklen_t;
 | |
| 	#else
 | |
| 		typedef hak_uint64_t hak_scklen_t;
 | |
| 	#endif
 | |
| #else
 | |
| 	#undef HAK_SIZEOF_SOCKLEN_T
 | |
| 	#define HAK_SIZEOF_SOCKLEN_T HAK_SIZEOF_INT
 | |
| 	#define HAK_SOCKLEN_T_IS_SIGNED
 | |
| 	typedef int hak_scklen_t;
 | |
| #endif
 | |
| 
 | |
| struct hak_sckaddr_t
 | |
| {
 | |
| #define HAK_SCKADDR_DATA_SIZE 0
 | |
| 
 | |
| #if (HAK_SIZEOF_STRUCT_SOCKADDR_IN > HAK_SCKADDR_DATA_SIZE)
 | |
| 	#undef HAK_SCKADDR_DATA_SIZE
 | |
| 	#define HAK_SCKADDR_DATA_SIZE HAK_SIZEOF_STRUCT_SOCKADDR_IN
 | |
| #endif
 | |
| #if (HAK_SIZEOF_STRUCT_SOCKADDR_IN6 > HAK_SCKADDR_DATA_SIZE)
 | |
| 	#undef HAK_SCKADDR_DATA_SIZE
 | |
| 	#define HAK_SCKADDR_DATA_SIZE HAK_SIZEOF_STRUCT_SOCKADDR_IN6
 | |
| #endif
 | |
| #if (HAK_SIZEOF_STRUCT_SOCKADDR_UN > HAK_SCKADDR_DATA_SIZE)
 | |
| 	#undef HAK_SCKADDR_DATA_SIZE
 | |
| 	#define HAK_SCKADDR_DATA_SIZE HAK_SIZEOF_STRUCT_SOCKADDR_UN
 | |
| #endif
 | |
| #if (HAK_SIZEOF_STRUCT_SOCKADDR_LL > HAK_SCKADDR_DATA_SIZE)
 | |
| 	#undef HAK_SCKADDR_DATA_SIZE
 | |
| 	#define HAK_SCKADDR_DATA_SIZE HAK_SIZEOF_STRUCT_SOCKADDR_LL
 | |
| #endif
 | |
| 
 | |
| #if (HAK_SCKADDR_DATA_SIZE == 0)
 | |
| 	#undef HAK_SCKADDR_DATA_SIZE
 | |
| 	#define HAK_SCKADDR_DATA_SIZE 64
 | |
| #endif
 | |
| 	hak_uint8_t storage[HAK_SCKADDR_DATA_SIZE];
 | |
| };
 | |
| typedef struct hak_sckaddr_t hak_sckaddr_t;
 | |
| 
 | |
| /* ---------------------------------------------------------------------- */
 | |
| 
 | |
| #if defined(__cplusplus)
 | |
| extern "C" {
 | |
| #endif
 | |
| 
 | |
| HAK_EXPORT hak_server_t* hak_server_open (
 | |
| 	hak_mmgr_t*        mmgr,
 | |
| 	hak_oow_t          xtnsize,
 | |
| 	hak_server_prim_t* prim,
 | |
| 	hak_errinf_t*      errinf
 | |
| );
 | |
| 
 | |
| HAK_EXPORT void hak_server_close (
 | |
| 	hak_server_t* server
 | |
| );
 | |
| 
 | |
| HAK_EXPORT int hak_server_start (
 | |
| 	hak_server_t*    server,
 | |
| 	const hak_bch_t* addrs
 | |
| );
 | |
| 
 | |
| HAK_EXPORT void hak_server_stop (
 | |
| 	hak_server_t* server
 | |
| );
 | |
| 
 | |
| HAK_EXPORT int hak_server_setoption (
 | |
| 	hak_server_t*       server,
 | |
| 	hak_server_option_t id,
 | |
| 	const void*         value
 | |
| );
 | |
| 
 | |
| HAK_EXPORT int hak_server_getoption (
 | |
| 	hak_server_t*       server,
 | |
| 	hak_server_option_t id,
 | |
| 	void*               value
 | |
| );
 | |
| 
 | |
| HAK_EXPORT void* hak_server_getxtn (
 | |
| 	hak_server_t* server
 | |
| );
 | |
| 
 | |
| HAK_EXPORT hak_mmgr_t* hak_server_getmmgr (
 | |
| 	hak_server_t* server
 | |
| );
 | |
| 
 | |
| 
 | |
| HAK_EXPORT hak_cmgr_t* hak_server_getcmgr (
 | |
| 	hak_server_t* server
 | |
| );
 | |
| 
 | |
| HAK_EXPORT void hak_server_setcmgr (
 | |
| 	hak_server_t* server,
 | |
| 	hak_cmgr_t*   cmgr
 | |
| );
 | |
| 
 | |
| HAK_EXPORT hak_errnum_t hak_server_geterrnum (
 | |
| 	hak_server_t* server
 | |
| );
 | |
| 
 | |
| HAK_EXPORT const hak_ooch_t* hak_server_geterrstr (
 | |
| 	hak_server_t* server
 | |
| );
 | |
| 
 | |
| HAK_EXPORT const hak_ooch_t* hak_server_geterrmsg (
 | |
| 	hak_server_t* server
 | |
| );
 | |
| 
 | |
| HAK_EXPORT void hak_server_seterrnum (
 | |
| 	hak_server_t* server,
 | |
| 	hak_errnum_t  errnum
 | |
| );
 | |
| 
 | |
| HAK_EXPORT void hak_server_seterrbfmt (
 | |
| 	hak_server_t*    server,
 | |
| 	hak_errnum_t     errnum,
 | |
| 	const hak_bch_t* fmt,
 | |
| 	...
 | |
| );
 | |
| 
 | |
| HAK_EXPORT void hak_server_seterrufmt (
 | |
| 	hak_server_t*    server,
 | |
| 	hak_errnum_t     errnum,
 | |
| 	const hak_uch_t* fmt,
 | |
| 	...
 | |
| );
 | |
| 
 | |
| HAK_EXPORT void hak_server_logbfmt (
 | |
| 	hak_server_t*    server,
 | |
| 	hak_bitmask_t  mask,
 | |
| 	const hak_bch_t* fmt,
 | |
| 	...
 | |
| );
 | |
| 
 | |
| HAK_EXPORT void hak_server_logufmt (
 | |
| 	hak_server_t*    server,
 | |
| 	hak_bitmask_t  mask,
 | |
| 	const hak_uch_t* fmt,
 | |
| 	...
 | |
| );
 | |
| 
 | |
| 
 | |
| HAK_EXPORT void* hak_server_allocmem (
 | |
| 	hak_server_t* server,
 | |
| 	hak_oow_t     size
 | |
| );
 | |
| 
 | |
| HAK_EXPORT void* hak_server_callocmem (
 | |
| 	hak_server_t* server,
 | |
| 	hak_oow_t     size
 | |
| );
 | |
| 
 | |
| HAK_EXPORT void* hak_server_reallocmem (
 | |
| 	hak_server_t* server,
 | |
| 	void*         ptr,
 | |
| 	hak_oow_t     size
 | |
| );
 | |
| 
 | |
| 
 | |
| HAK_EXPORT void hak_server_freemem (
 | |
| 	hak_server_t* server,
 | |
| 	void*         ptr
 | |
| );
 | |
| 
 | |
| 
 | |
| /* ---------------------------------------------------------------------- */
 | |
| 
 | |
| HAK_EXPORT hak_client_t* hak_client_open (
 | |
| 	hak_mmgr_t*        mmgr,
 | |
| 	hak_oow_t          xtnsize,
 | |
| 	hak_client_prim_t* prim,
 | |
| 	hak_errinf_t*      errinf
 | |
| );
 | |
| 
 | |
| HAK_EXPORT void hak_client_close (
 | |
| 	hak_client_t* client
 | |
| );
 | |
| 
 | |
| HAK_EXPORT int hak_client_start (
 | |
| 	hak_client_t* client,
 | |
| 	const char*   ipaddr,
 | |
| 	int           shut_wr_after_req
 | |
| );
 | |
| 
 | |
| HAK_EXPORT void hak_client_stop (
 | |
| 	hak_client_t* client
 | |
| );
 | |
| 
 | |
| HAK_EXPORT int hak_client_setoption (
 | |
| 	hak_client_t*       client,
 | |
| 	hak_client_option_t id,
 | |
| 	const void*         value
 | |
| );
 | |
| 
 | |
| HAK_EXPORT int hak_client_getoption (
 | |
| 	hak_client_t*       client,
 | |
| 	hak_client_option_t id,
 | |
| 	void*               value
 | |
| );
 | |
| 
 | |
| 
 | |
| HAK_EXPORT void* hak_client_getxtn (
 | |
| 	hak_client_t* client
 | |
| );
 | |
| 
 | |
| HAK_EXPORT hak_mmgr_t* hak_client_getmmgr (
 | |
| 	hak_client_t* client
 | |
| );
 | |
| 
 | |
| HAK_EXPORT hak_cmgr_t* hak_client_getcmgr (
 | |
| 	hak_client_t* client
 | |
| );
 | |
| 
 | |
| HAK_EXPORT void hak_client_setcmgr (
 | |
| 	hak_client_t* client,
 | |
| 	hak_cmgr_t*   cmgr
 | |
| );
 | |
| 
 | |
| 
 | |
| HAK_EXPORT hak_errnum_t hak_client_geterrnum (
 | |
| 	hak_client_t* client
 | |
| );
 | |
| 
 | |
| HAK_EXPORT const hak_ooch_t* hak_client_geterrstr (
 | |
| 	hak_client_t* client
 | |
| );
 | |
| 
 | |
| HAK_EXPORT const hak_ooch_t* hak_client_geterrmsg (
 | |
| 	hak_client_t* client
 | |
| );
 | |
| 
 | |
| HAK_EXPORT const hak_bch_t* hak_client_geterrbmsg (
 | |
| 	hak_client_t* client
 | |
| );
 | |
| 
 | |
| HAK_EXPORT const hak_uch_t* hak_client_geterrumsg (
 | |
| 	hak_client_t* client
 | |
| );
 | |
| 
 | |
| 
 | |
| HAK_EXPORT void hak_client_seterrnum (
 | |
| 	hak_client_t* client,
 | |
| 	hak_errnum_t  errnum
 | |
| );
 | |
| 
 | |
| HAK_EXPORT void hak_client_seterrbfmt (
 | |
| 	hak_client_t*    client,
 | |
| 	hak_errnum_t     errnum,
 | |
| 	const hak_bch_t* fmt,
 | |
| 	...
 | |
| );
 | |
| 
 | |
| HAK_EXPORT void hak_client_seterrufmt (
 | |
| 	hak_client_t*    client,
 | |
| 	hak_errnum_t     errnum,
 | |
| 	const hak_uch_t* fmt,
 | |
| 	...
 | |
| );
 | |
| 
 | |
| HAK_EXPORT void hak_client_logbfmt (
 | |
| 	hak_client_t*    client,
 | |
| 	hak_bitmask_t  mask,
 | |
| 	const hak_bch_t* fmt,
 | |
| 	...
 | |
| );
 | |
| 
 | |
| HAK_EXPORT void hak_client_logufmt (
 | |
| 	hak_client_t*    client,
 | |
| 	hak_bitmask_t  mask,
 | |
| 	const hak_uch_t* fmt,
 | |
| 	...
 | |
| );
 | |
| 
 | |
| HAK_EXPORT void* hak_client_allocmem (
 | |
| 	hak_client_t* client,
 | |
| 	hak_oow_t     size
 | |
| );
 | |
| 
 | |
| HAK_EXPORT void* hak_client_callocmem (
 | |
| 	hak_client_t* client,
 | |
| 	hak_oow_t     size
 | |
| );
 | |
| 
 | |
| HAK_EXPORT void* hak_client_reallocmem (
 | |
| 	hak_client_t* client,
 | |
| 	void*         ptr,
 | |
| 	hak_oow_t     size
 | |
| );
 | |
| 
 | |
| 
 | |
| HAK_EXPORT void hak_client_freemem (
 | |
| 	hak_client_t* client,
 | |
| 	void*         ptr
 | |
| );
 | |
| 
 | |
| 
 | |
| /* ---------------------------------------------------------------------- */
 | |
| 
 | |
| HAK_EXPORT hak_xproto_t* hak_xproto_open (
 | |
| 	hak_mmgr_t*      mmgr,
 | |
| 	hak_xproto_cb_t* cb,
 | |
| 	hak_oow_t        xtnsize
 | |
| );
 | |
| 
 | |
| HAK_EXPORT void hak_xproto_close (
 | |
| 	hak_xproto_t*  proto
 | |
| );
 | |
| 
 | |
| HAK_EXPORT void* hak_xproto_getxtn (
 | |
| 	hak_xproto_t*  proto
 | |
| );
 | |
| 
 | |
| HAK_EXPORT hak_uint8_t* hak_xproto_getbuf (
 | |
| 	hak_xproto_t*  proto,
 | |
| 	hak_oow_t*     capa
 | |
| );
 | |
| 
 | |
| HAK_EXPORT int hak_xproto_geteof (
 | |
| 	hak_xproto_t*  proto
 | |
| );
 | |
| 
 | |
| HAK_EXPORT void hak_xproto_seteof (
 | |
| 	hak_xproto_t*  proto,
 | |
| 	int            v
 | |
| );
 | |
| 
 | |
| HAK_EXPORT void hak_xproto_advbuf (
 | |
| 	hak_xproto_t*  proto,
 | |
| 	hak_oow_t      inc
 | |
| );
 | |
| 
 | |
| HAK_EXPORT int hak_xproto_ready (
 | |
| 	hak_xproto_t*  proto
 | |
| );
 | |
| 
 | |
| HAK_EXPORT int hak_xproto_process (
 | |
| 	hak_xproto_t*  proto
 | |
| );
 | |
| 
 | |
| /* ---------------------------------------------------------------------- */
 | |
| 
 | |
| HAK_EXPORT int hak_sys_send (
 | |
| 	int          sck,
 | |
| 	const void*  data,
 | |
| 	hak_oow_t*   size
 | |
| );
 | |
| 
 | |
| HAK_EXPORT int hak_sys_send_iov (
 | |
| 	int          sck,
 | |
| 	hak_iovec_t* iov, /* note this is not read-only and can change */
 | |
| 	int          count
 | |
| );
 | |
| 
 | |
| HAK_EXPORT int hak_sys_open_pipes (
 | |
| 	int          pfd[2],
 | |
| 	int          nonblock
 | |
| );
 | |
| 
 | |
| HAK_EXPORT void hak_sys_close_pipes (
 | |
| 	int          pfd[2]
 | |
| );
 | |
| 
 | |
| HAK_EXPORT int hak_sys_set_nonblock (
 | |
| 	int          fd,
 | |
| 	int          v
 | |
| );
 | |
| 
 | |
| HAK_EXPORT int hak_sys_set_cloexec (
 | |
| 	int          fd,
 | |
| 	int          v
 | |
| );
 | |
| 
 | |
| HAK_EXPORT int hak_sys_is_errno_wb (
 | |
| 	int          no
 | |
| );
 | |
| 
 | |
| /* ---------------------------------------------------------------------- */
 | |
| 
 | |
| HAK_EXPORT int hak_ucharstosckaddr (
 | |
| 	hak_t*           hak,
 | |
| 	const hak_uch_t* str,
 | |
| 	hak_oow_t        len,
 | |
| 	hak_sckaddr_t*   sckaddr,
 | |
| 	hak_scklen_t*    scklen
 | |
| );
 | |
| 
 | |
| HAK_EXPORT int hak_bcharstosckaddr (
 | |
| 	hak_t*           hak,
 | |
| 	const hak_bch_t* str,
 | |
| 	hak_oow_t        len,
 | |
| 	hak_sckaddr_t*   sckaddr,
 | |
| 	hak_scklen_t*    scklen
 | |
| );
 | |
| 
 | |
| #if defined(HAK_HAVE_INLINE)
 | |
| static HAK_INLINE int hak_uchars_to_sckaddr (const hak_uch_t* str, hak_oow_t len, hak_sckaddr_t* sckaddr, hak_scklen_t* scklen)
 | |
| {
 | |
| 	return hak_ucharstosckaddr(HAK_NULL, str, len, sckaddr, scklen);
 | |
| }
 | |
| static HAK_INLINE int hak_bchars_to_sckaddr (const hak_bch_t* str, hak_oow_t len, hak_sckaddr_t* sckaddr, hak_scklen_t* scklen)
 | |
| {
 | |
| 	return hak_bcharstosckaddr(HAK_NULL, str, len, sckaddr, scklen);
 | |
| }
 | |
| #else
 | |
| #define hak_uchars_to_sckaddr(str,len,sckaddr,scklen) hak_ucharstosckaddr(HAK_NULL,str,len,sckaddr,scklen)
 | |
| #define hak_bchars_to_sckaddr(str,len,sckaddr,scklen) hak_bcharstosckaddr(HAK_NULL,str,len,sckaddr,scklen)
 | |
| #endif
 | |
| 
 | |
| #if defined(HAK_OOCH_IS_UCH)
 | |
| #	define hak_oocharstosckaddr hak_ucharstosckaddr
 | |
| #	define hak_oochars_to_sckaddr hak_uchars_to_sckaddr
 | |
| #else
 | |
| #	define hak_oocharstosckaddr hak_bcharstosckaddr
 | |
| #	define hak_oochars_to_sckaddr hak_bchars_to_sckaddr
 | |
| #endif
 | |
| 
 | |
| /**
 | |
|  * The hak_get_sckaddr_info() function returns the socket family.
 | |
|  * if \a scklen is not #HAK_NULL, it also sets the actual address length
 | |
|  * in the memory pointed to by it.
 | |
|  */
 | |
| HAK_EXPORT int hak_get_sckaddr_info (
 | |
| 	const hak_sckaddr_t* sckaddr,
 | |
| 	hak_scklen_t*        scklen
 | |
| );
 | |
| 
 | |
| #if defined(__cplusplus)
 | |
| }
 | |
| #endif
 | |
| 
 | |
| #endif
 |