2 #ifndef GLOBUS_DONT_DOCUMENT_INTERNAL
4 #if !defined(GLOBUS_I_XIO_H)
5 #define GLOBUS_I_XIO_H 1
7 #include "globus_xio.h"
8 #include "globus_xio_driver.h"
9 #include "globus_common.h"
10 #include "globus_xio_util.h"
11 #include "globus_xio_load.h"
13 #define GLOBUS_XIO_ATTR_ARRAY_BASE_SIZE 16
14 #define GLOBUS_XIO_HANDLE_DEFAULT_OPERATION_COUNT 4
21 #define GlobusXIOCurrentBlockedThread(blocked_thread) \
22 if (globus_i_am_only_thread()) \
24 blocked_thread.thread = globus_thread_self(); \
28 blocked_thread.depth = globus_callback_space_get_depth( \
29 GLOBUS_CALLBACK_GLOBAL_SPACE); \
31 #define GlobusXIOBlockedThreadMatchesCurrentThread(a) \
32 (globus_i_am_only_thread() \
34 globus_callback_space_get_depth(GLOBUS_CALLBACK_GLOBAL_SPACE)) \
35 : globus_thread_equal(a.thread, globus_thread_self()))
37 GlobusDebugDeclare(GLOBUS_XIO);
39 #define GlobusXIODebugPrintf(level, message) \
40 GlobusDebugPrintf(GLOBUS_XIO, level, message)
42 #define GlobusXIOOpInc(_in_op) \
46 GlobusXIODebugPrintf( \
47 GLOBUS_XIO_DEBUG_STATE, \
48 ("[%s:%d] Op @ 0x%x ref increased to %d:\n", _xio_name, __LINE__, \
49 (_in_op), (_in_op)->ref)); \
52 #define GlobusXIOOpDec(_in_op) \
56 GlobusXIODebugPrintf( \
57 GLOBUS_XIO_DEBUG_STATE, \
58 ("[%s:%d] Op @ 0x%x ref decreased to %d:\n", _xio_name, __LINE__, \
59 (_in_op), (_in_op)->ref)); \
62 #define GlobusXIOObjToResult(_in_obj) \
63 (_in_obj == NULL ? GLOBUS_SUCCESS : globus_error_put(_in_obj))
65 #define GlobusXIOResultToObj(_in_res) \
66 (_in_res == GLOBUS_SUCCESS ? NULL : globus_error_get(_in_res))
68 #define GlobusXIOHandleStateChange(_h, _new) \
71 globus_i_xio_handle_t * _l_h; \
74 GlobusXIODebugPrintf( \
75 GLOBUS_XIO_DEBUG_STATE, \
76 ("[%s:%d] Handle @ 0x%x state change:\n" \
82 globus_i_xio_handle_state_name_table[_l_h->state], \
83 globus_i_xio_handle_state_name_table[_new])); \
87 #define GlobusXIOOpStateChange(_op, _new) \
90 globus_i_xio_op_t * _l_op; \
93 GlobusXIODebugPrintf( \
94 GLOBUS_XIO_DEBUG_STATE, \
95 ("[%s:%d] Op @ 0x%x state change:\n" \
101 globus_i_xio_op_state_name_table[_l_op->state], \
102 globus_i_xio_op_state_name_table[_new])); \
103 _l_op->state = _new; \
106 #define GlobusXIOContextStateChange(_c, _new) \
109 globus_i_xio_context_entry_t * _l_context; \
112 GlobusXIODebugPrintf( \
113 GLOBUS_XIO_DEBUG_STATE, \
114 ("[%s:%d] Context @ 0x%x state change:\n" \
120 globus_i_xio_context_state_name_table[_l_context->state], \
121 globus_i_xio_context_state_name_table[_new])); \
122 _l_context->state = _new; \
125 #define GlobusXIODebugEnter() \
126 GlobusXIODebugPrintf( \
127 GLOBUS_XIO_DEBUG_TRACE, \
128 ("[%s] Entering\n", _xio_name))
130 #define GlobusXIODebugExit() \
131 GlobusXIODebugPrintf( \
132 GLOBUS_XIO_DEBUG_TRACE, \
133 ("[%s] Exiting\n", _xio_name))
135 #define GlobusXIODebugExitWithError() \
136 GlobusXIODebugPrintf( \
137 GLOBUS_XIO_DEBUG_TRACE, \
138 ("[%s] Exiting with error\n", _xio_name))
140 #define GlobusXIODebugInternalEnter() \
141 GlobusXIODebugPrintf( \
142 GLOBUS_XIO_DEBUG_INTERNAL_TRACE, \
143 ("[%s] I Entering\n", _xio_name))
145 #define GlobusXIODebugInternalExit() \
146 GlobusXIODebugPrintf( \
147 GLOBUS_XIO_DEBUG_INTERNAL_TRACE, \
148 ("[%s] I Exiting\n", _xio_name))
150 #define GlobusXIODebugInternalExitWithError() \
151 GlobusXIODebugPrintf( \
152 GLOBUS_XIO_DEBUG_INTERNAL_TRACE, \
153 ("[%s] I Exiting with error\n", _xio_name))
155 #define GlobusXIODebugInregisterOneShot() \
156 GlobusXIODebugPrintf( \
157 GLOBUS_XIO_DEBUG_INFO, \
158 ("[%s] Registering one shot due to in_register.\n", _xio_name))
160 #define GlobusXIODebugDelayedFinish() \
161 GlobusXIODebugPrintf( \
162 GLOBUS_XIO_DEBUG_INFO, \
163 ("[%s] Delaying finish due to in_register and blocking op.\n", \
166 #define GlobusXIOOperationCreate(_out_op, _in_c) \
169 globus_i_xio_op_t * _X_op; \
170 globus_i_xio_context_t * _X_c; \
173 _X_op = (globus_i_xio_op_t * ) \
174 globus_memory_pop_node(&_X_c->op_memory); \
178 memset(_X_op, '\0', sizeof(globus_i_xio_op_t) + \
179 (sizeof(globus_i_xio_op_entry_t) * (_X_c->stack_size - 1))); \
180 _X_op->_op_context = _X_c; \
181 _X_op->stack_size = _X_c->stack_size; \
182 _X_op->progress = GLOBUS_TRUE; \
183 _X_op->_op_ent_offset = -1; \
192 #define GlobusIXIOClearCancel(op) \
195 globus_i_xio_op_t * _op = (op); \
201 globus_mutex_lock(&_op->_op_context->cancel_mutex); \
202 if(_op->canceled == _op->ndx + 1) \
206 globus_mutex_unlock(&_op->_op_context->cancel_mutex); \
216 typedef struct gss_cred_id_desc_struct * gss_cred_id_t;
218 extern char * globus_i_xio_context_state_name_table[];
220 typedef enum globus_i_xio_context_state_e
222 GLOBUS_XIO_CONTEXT_STATE_NONE,
223 GLOBUS_XIO_CONTEXT_STATE_OPENING,
224 GLOBUS_XIO_CONTEXT_STATE_OPEN,
225 GLOBUS_XIO_CONTEXT_STATE_OPEN_FAILED,
226 GLOBUS_XIO_CONTEXT_STATE_EOF_RECEIVED,
227 GLOBUS_XIO_CONTEXT_STATE_EOF_DELIVERED,
228 GLOBUS_XIO_CONTEXT_STATE_EOF_RECEIVED_AND_CLOSING,
229 GLOBUS_XIO_CONTEXT_STATE_EOF_DELIVERED_AND_CLOSING,
230 GLOBUS_XIO_CONTEXT_STATE_CLOSING,
231 GLOBUS_XIO_CONTEXT_STATE_OPENING_AND_CLOSING,
232 GLOBUS_XIO_CONTEXT_STATE_CLOSED
233 } globus_i_xio_context_state_t;
235 extern char * globus_i_xio_handle_state_name_table[];
237 typedef enum globus_i_xio_handle_state_e
239 GLOBUS_XIO_HANDLE_STATE_NONE,
240 GLOBUS_XIO_HANDLE_STATE_CLIENT,
241 GLOBUS_XIO_HANDLE_STATE_ACCEPTED,
242 GLOBUS_XIO_HANDLE_STATE_OPENING,
243 GLOBUS_XIO_HANDLE_STATE_OPENING_FAILED,
244 GLOBUS_XIO_HANDLE_STATE_OPENING_AND_CLOSING,
245 GLOBUS_XIO_HANDLE_STATE_OPEN,
246 GLOBUS_XIO_HANDLE_STATE_OPEN_FAILED,
247 GLOBUS_XIO_HANDLE_STATE_CLOSING,
248 GLOBUS_XIO_HANDLE_STATE_CLOSED
249 } globus_i_xio_handle_state_t;
251 extern char * globus_i_xio_op_state_name_table[];
253 typedef enum globus_i_xio_op_state_e
255 GLOBUS_XIO_OP_STATE_NONE,
256 GLOBUS_XIO_OP_STATE_OPERATING,
257 GLOBUS_XIO_OP_STATE_TIMEOUT_PENDING,
258 GLOBUS_XIO_OP_STATE_FINISH_WAITING,
259 GLOBUS_XIO_OP_STATE_FINISHED
260 } globus_i_xio_op_state_t;
262 typedef enum globus_xio_server_state_e
264 GLOBUS_XIO_SERVER_STATE_NONE,
265 GLOBUS_XIO_SERVER_STATE_OPEN,
266 GLOBUS_XIO_SERVER_STATE_ACCEPTING,
267 GLOBUS_XIO_SERVER_STATE_COMPLETING,
268 GLOBUS_XIO_SERVER_STATE_CLOSE_PENDING,
269 GLOBUS_XIO_SERVER_STATE_CLOSING,
270 GLOBUS_XIO_SERVER_STATE_CLOSED
271 } globus_xio_server_state_t;
279 struct globus_i_xio_context_s;
280 struct globus_i_xio_op_s;
282 typedef struct globus_i_xio_monitor_s
285 } globus_i_xio_monitor_t;
288 globus_i_xio_monitor_init(
289 globus_i_xio_monitor_t * monitor);
292 globus_i_xio_monitor_destroy(
293 globus_i_xio_monitor_t * monitor);
295 typedef struct globus_i_xio_attr_ent_s
297 globus_xio_driver_t driver;
299 } globus_i_xio_attr_ent_t;
301 typedef struct globus_i_xio_attr_s
303 globus_bool_t unloaded;
306 globus_reltime_t open_timeout_period;
308 globus_reltime_t read_timeout_period;
310 globus_reltime_t write_timeout_period;
312 globus_reltime_t close_timeout_period;
314 globus_xio_timeout_server_callback_t accept_timeout_cb;
315 globus_reltime_t accept_timeout_period;
317 globus_bool_t cancel_open;
318 globus_bool_t cancel_close;
319 globus_bool_t cancel_read;
320 globus_bool_t cancel_write;
322 globus_bool_t no_cancel;
325 gss_cred_id_t user_open_cred;
326 char * user_open_sbj;
327 char * user_open_username;
330 globus_callback_space_t space;
334 globus_i_xio_attr_ent_t * entry;
335 } globus_i_xio_attr_t;
337 typedef struct globus_i_xio_stack_s
340 globus_list_t * driver_stack;
341 globus_xio_driver_t pushing_driver;
342 } globus_i_xio_stack_t;
345 typedef struct globus_i_xio_server_entry_s
347 globus_xio_driver_t driver;
348 void * server_handle;
349 } globus_i_xio_server_entry_t;
353 typedef struct globus_i_xio_server_s
355 globus_i_xio_monitor_t * sd_monitor;
357 globus_xio_server_state_t state;
359 globus_xio_timeout_server_callback_t accept_timeout;
360 globus_reltime_t accept_timeout_period;
361 struct globus_i_xio_op_s * op;
366 int outstanding_operations;
369 globus_mutex_t mutex;
370 globus_callback_space_t space;
372 globus_bool_t blocking;
373 char * contact_string;
376 globus_i_xio_server_entry_t entry[1];
377 } globus_i_xio_server_t;
379 typedef struct globus_i_xio_handle_s
381 globus_i_xio_monitor_t * sd_monitor;
383 globus_list_t * cb_list;
385 struct globus_i_xio_context_s * context;
387 globus_i_xio_handle_state_t state;
391 globus_list_t * write_op_list;
392 globus_list_t * read_op_list;
393 struct globus_i_xio_op_s * open_op;
394 struct globus_i_xio_op_s * close_op;
398 globus_callback_space_t space;
400 globus_reltime_t open_timeout_period;
402 globus_reltime_t read_timeout_period;
404 globus_reltime_t write_timeout_period;
406 globus_reltime_t close_timeout_period;
407 } globus_i_xio_handle_t;
414 typedef struct globus_i_xio_context_entry_s
416 globus_xio_driver_t driver;
417 void * driver_handle;
420 globus_i_xio_context_state_t state;
421 int outstanding_operations;
427 globus_bool_t close_started;
429 struct globus_i_xio_op_s * open_op;
430 struct globus_i_xio_op_s * close_op;
431 globus_list_t * eof_op_list;
432 globus_fifo_t pending_read_queue;
433 struct globus_i_xio_context_s * whos_my_daddy;
434 } globus_i_xio_context_entry_t;
439 typedef struct globus_i_xio_context_s
445 globus_memory_t op_memory;
446 globus_mutex_t mutex;
447 globus_mutex_t cancel_mutex;
448 globus_i_xio_context_entry_t entry[1];
449 } globus_i_xio_context_t;
452 #define _op_ent_data_cb type_u.handle_s.data_cb
453 #define _op_ent_wait_for type_u.handle_s.wait_for_bytes
454 #define _op_ent_offset type_u.handle_s.offset
455 #define _op_ent_nbytes type_u.handle_s.nbytes
456 #define _op_ent_iovec type_u.handle_s.iovec
457 #define _op_ent_iovec_count type_u.handle_s.iovec_count
458 #define _op_ent_fake_iovec type_u.handle_s.fake_iovec
464 typedef struct globus_i_xio_op_entry_s
477 globus_size_t wait_for_bytes;
478 globus_size_t nbytes;
479 globus_xio_iovec_t * iovec;
481 globus_xio_iovec_t * fake_iovec;
484 globus_bool_t in_register;
485 globus_bool_t is_limited;
495 } globus_i_xio_op_entry_t;
498 #define _op_data_cb data_cb
499 #define _op_iovec_cb iovec_cb
500 #define _op_cb callback_u.cb
501 #define _op_accept_cb callback_u.accept_cb
503 #define _op_handle type_u.handle_s.handle
504 #define _op_iovec type_u.handle_s.iovec
505 #define _op_iovec_count type_u.handle_s.iovec_count
506 #define _op_mem_iovec type_u.handle_s.mem_iovec
507 #define _op_context type_u.handle_s.context
508 #define _op_nbytes type_u.handle_s.nbytes
509 #define _op_wait_for type_u.handle_s.wait_for
510 #define _op_handle_timeout_cb type_u.handle_s.timeout_cb
512 #define _op_server type_u.server_s.server
513 #define _op_server_timeout_cb type_u.server_s.timeout_cb
523 globus_thread_t thread;
526 globus_i_xio_blocked_thread_t;
530 typedef struct globus_i_xio_op_s
534 globus_i_xio_op_state_t state;
536 globus_bool_t is_user_dd;
559 globus_i_xio_handle_t * handle;
561 globus_xio_iovec_t * iovec;
563 globus_xio_iovec_t mem_iovec;
565 globus_size_t nbytes;
568 globus_i_xio_context_t * context;
570 globus_size_t wait_for;
577 globus_i_xio_server_t * server;
578 globus_xio_timeout_server_callback_t timeout_cb;
583 globus_bool_t progress;
589 globus_xio_driver_cancel_callback_t cancel_cb;
592 globus_bool_t block_timeout;
594 globus_bool_t restarted;
595 globus_bool_t blocking;
596 globus_i_xio_blocked_thread_t blocked_thread;
597 globus_bool_t finished_delayed;
601 gss_cred_id_t user_open_cred;
602 char * user_open_sbj;
603 char * user_open_username;
607 globus_object_t * cached_obj;
614 globus_i_xio_op_entry_t entry[1];
617 typedef struct globus_i_xio_driver_s
623 globus_xio_driver_hook_t * hook;
624 globus_extension_handle_t extension_handle;
625 globus_bool_t extension_activated;
627 globus_xio_string_cntl_table_t * string_table;
628 globus_xio_string_cntl_table_t * handle_string_table;
640 globus_xio_driver_push_driver_t push_driver_func;
650 globus_xio_driver_link_cntl_t link_cntl_func;
662 } globus_i_xio_driver_t;
668 typedef struct globus_i_xio_blocking_s
670 globus_mutex_t mutex;
673 globus_size_t nbytes;
674 globus_i_xio_op_t * op;
675 globus_xio_handle_t accepted_handle;
676 globus_xio_data_descriptor_t data_desc;
677 globus_object_t * error_obj;
678 } globus_i_xio_blocking_t;
680 typedef struct globus_i_xio_restart_s
682 globus_i_xio_op_t * op;
683 globus_bool_t restarted;
684 } globus_i_xio_restart_t;
686 globus_i_xio_blocking_t *
687 globus_i_xio_blocking_alloc();
690 globus_i_xio_blocking_destroy(
691 globus_i_xio_blocking_t * info);
697 globus_i_xio_server_close(
698 globus_xio_server_t xio_server,
703 globus_l_xio_driver_purge_read_eof(
704 globus_i_xio_context_entry_t * my_context);
707 globus_l_xio_driver_op_write_kickout(
711 globus_l_xio_driver_op_read_kickout(
715 globus_i_xio_driver_start_close(
716 globus_i_xio_op_t * op,
717 globus_bool_t can_fail);
720 globus_l_xio_driver_op_close_kickout(
724 globus_l_xio_driver_op_accept_kickout(
728 globus_l_xio_driver_open_op_kickout(
732 globus_i_xio_driver_resume_op(
733 globus_i_xio_op_t * op);
738 typedef globus_bool_t
739 (*globus_i_xio_timer_cb_t)(
742 typedef struct globus_i_xio_op_timer_s
744 globus_reltime_t minimal_delay;
745 globus_mutex_t mutex;
747 globus_list_t * op_list;
748 globus_bool_t running;
749 globus_callback_handle_t periodic_handle;
750 } globus_i_xio_timer_t;
753 globus_i_xio_timer_init(
754 globus_i_xio_timer_t * timer);
757 globus_i_xio_timer_destroy(
758 globus_i_xio_timer_t * timer);
761 globus_i_xio_timer_register_timeout(
762 globus_i_xio_timer_t * timer,
764 globus_bool_t * progress_ptr,
765 globus_i_xio_timer_cb_t timeout_cb,
766 globus_reltime_t * timeout);
769 globus_i_xio_timer_unregister_timeout(
770 globus_i_xio_timer_t * timer,
773 globus_i_xio_context_t *
774 globus_i_xio_context_create(
778 globus_i_xio_context_destroy(
779 globus_i_xio_context_t * xio_context);
782 globus_i_xio_will_block_cb(
784 globus_thread_callback_index_t ndx,
788 globus_i_xio_pass_failed(
789 globus_i_xio_op_t * op,
790 globus_i_xio_context_entry_t * my_context,
791 globus_bool_t * close,
792 globus_bool_t * destroy_handle);
795 globus_i_xio_handle_destroy(
796 globus_i_xio_handle_t * handle);
799 globus_i_xio_handle_dec(
800 globus_i_xio_handle_t * handle,
801 globus_bool_t * destroy_handle);
804 globus_i_xio_op_destroy(
805 globus_i_xio_op_t * op,
806 globus_bool_t * destroy_handle);
809 globus_i_xio_repass_write(
810 globus_i_xio_op_t * op);
813 globus_i_xio_repass_read(
814 globus_i_xio_op_t * op);
817 globus_i_xio_register_oneshot(
818 globus_i_xio_handle_t * handle,
819 globus_callback_func_t cb,
821 globus_callback_space_t space);
824 typedef struct globus_i_xio_space_info_s
826 globus_bool_t unregister;
827 globus_i_xio_handle_t * handle;
828 globus_callback_handle_t ch;
829 globus_callback_func_t func;
831 } globus_i_xio_space_info_t;
834 globus_i_xio_close_handles(
835 globus_xio_driver_t driver);
838 globus_i_xio_operation_cancel(
839 globus_i_xio_op_t * op,
843 globus_i_xio_driver_deliver_op(
844 globus_i_xio_op_t * op,
849 globus_xio_driver_open_delivered(
850 globus_xio_operation_t in_op,
855 globus_xio_driver_write_delivered(
856 globus_xio_operation_t in_op,
861 globus_xio_driver_read_delivered(
862 globus_xio_operation_t op,
867 globus_i_xio_driver_dd_cntl(
868 globus_i_xio_op_t * op,
869 globus_xio_driver_t driver,
875 globus_i_xio_driver_handle_cntl(
876 globus_i_xio_context_t * context,
878 globus_xio_driver_t driver,
883 globus_i_xio_driver_attr_cntl(
884 globus_i_xio_attr_t * attr,
885 globus_xio_driver_t driver,
890 globus_i_xio_string_cntl_parser(
891 const char * env_str,
892 globus_xio_string_cntl_table_t * table,
897 extern globus_i_xio_timer_t globus_i_xio_timeout_timer;
898 extern globus_list_t * globus_i_xio_outstanding_handles_list;
899 extern globus_list_t * globus_i_xio_outstanding_servers_list;
900 extern globus_list_t * globus_i_xio_outstanding_attrs_list;
901 extern globus_list_t * globus_i_xio_outstanding_dds_list;
902 extern globus_mutex_t globus_i_xio_mutex;
903 extern globus_cond_t globus_i_xio_cond;
void(* globus_xio_driver_data_callback_t)(globus_xio_operation_t op, globus_result_t result, globus_size_t nbytes, void *user_arg)
Definition: globus_xio_driver.h:285
void(* globus_xio_accept_callback_t)(globus_xio_server_t server, globus_xio_handle_t handle, globus_result_t result, void *user_arg)
Definition: globus_xio.h:342
globus_result_t(* globus_xio_driver_attr_copy_t)(void **dst, void *src)
Definition: globus_xio_driver.h:353
globus_result_t(* globus_xio_driver_read_t)(void *driver_specific_handle, const globus_xio_iovec_t *iovec, int iovec_count, globus_xio_operation_t op)
Definition: globus_xio_driver.h:868
globus_result_t(* globus_xio_driver_write_t)(void *driver_specific_handle, const globus_xio_iovec_t *iovec, int iovec_count, globus_xio_operation_t op)
Definition: globus_xio_driver.h:1018
globus_result_t(* globus_xio_driver_server_destroy_t)(void *driver_server)
Definition: globus_xio_driver.h:470
globus_result_t(* globus_xio_driver_attr_cntl_t)(void *attr, int cmd, va_list ap)
Definition: globus_xio_driver.h:388
void(* globus_xio_data_callback_t)(globus_xio_handle_t handle, globus_result_t result, globus_byte_t *buffer, globus_size_t len, globus_size_t nbytes, globus_xio_data_descriptor_t data_desc, void *user_arg)
Definition: globus_xio.h:585
globus_result_t(* globus_xio_driver_close_t)(void *driver_handle, void *driver_attr, globus_xio_operation_t op)
Close a handle.
Definition: globus_xio_driver.h:794
globus_bool_t(* globus_xio_timeout_callback_t)(globus_xio_handle_t handle, globus_xio_operation_type_t type, void *user_arg)
Definition: globus_xio.h:506
enum globus_i_xio_op_type_e globus_xio_operation_type_t
void(* globus_xio_callback_t)(globus_xio_handle_t handle, globus_result_t result, void *user_arg)
Definition: globus_xio.h:571
globus_result_t(* globus_xio_driver_transport_open_t)(const globus_xio_contact_t *contact_info, void *driver_link, void *driver_attr, globus_xio_operation_t op)
Open a handle.
Definition: globus_xio_driver.h:629
globus_result_t(* globus_xio_driver_attr_destroy_t)(void *driver_attr)
Definition: globus_xio_driver.h:365
void(* globus_xio_driver_callback_t)(globus_xio_operation_t op, globus_result_t result, void *user_arg)
Open and Close Callback Signature.
Definition: globus_xio_driver.h:257
globus_result_t(* globus_xio_driver_handle_cntl_t)(void *handle, int cmd, va_list ap)
Definition: globus_xio_driver.h:760
globus_result_t(* globus_xio_driver_server_init_t)(void *driver_attr, const globus_xio_contact_t *contact_info, globus_xio_operation_t op)
Definition: globus_xio_driver.h:419
globus_result_t(* globus_xio_driver_transform_open_t)(const globus_xio_contact_t *contact_info, void *driver_link, void *driver_attr, globus_xio_operation_t op)
Open a handle.
Definition: globus_xio_driver.h:618
globus_result_t(* globus_xio_driver_link_destroy_t)(void *driver_link)
Definition: globus_xio_driver.h:582
globus_result_t(* globus_xio_driver_server_cntl_t)(void *driver_server, int cmd, va_list ap)
Definition: globus_xio_driver.h:556
globus_result_t(* globus_xio_driver_server_accept_t)(void *driver_server, globus_xio_operation_t op)
Definition: globus_xio_driver.h:494
void(* globus_xio_server_callback_t)(globus_xio_server_t server, void *user_arg)
Definition: globus_xio.h:356
void(* globus_xio_iovec_callback_t)(globus_xio_handle_t handle, globus_result_t result, globus_xio_iovec_t *iovec, int count, globus_size_t nbytes, globus_xio_data_descriptor_t data_desc, void *user_arg)
Definition: globus_xio.h:603
globus_result_t(* globus_xio_driver_attr_init_t)(void **out_driver_attr)
Definition: globus_xio_driver.h:342