6 #ifndef GLOBUS_XIO_SYSTEM_INCLUDE
7 #define GLOBUS_XIO_SYSTEM_INCLUDE
9 #include "globus_common.h"
10 #include "globus_xio_types.h"
16 #define GLOBUS_XIO_SYSTEM_MODULE (&globus_i_xio_system_module)
17 extern globus_module_descriptor_t globus_i_xio_system_module;
23 #define GLOBUS_XIO_SYSTEM_INVALID_FILE INVALID_HANDLE_VALUE
24 #define GLOBUS_XIO_SYSTEM_INVALID_SOCKET INVALID_SOCKET
26 typedef struct globus_l_xio_win32_file_s * globus_xio_system_file_handle_t;
27 typedef struct globus_l_xio_win32_socket_s * globus_xio_system_socket_handle_t;
29 typedef SOCKET globus_xio_system_socket_t;
30 typedef HANDLE globus_xio_system_file_t;
34 #define GLOBUS_XIO_SYSTEM_INVALID_FILE -1
35 #define GLOBUS_XIO_SYSTEM_INVALID_SOCKET -1
38 typedef struct globus_l_xio_system_s * globus_xio_system_file_handle_t;
39 typedef struct globus_l_xio_system_s * globus_xio_system_socket_handle_t;
42 typedef int globus_xio_system_socket_t;
43 typedef int globus_xio_system_file_t;
46 typedef int globus_xio_system_native_handle_t;
51 GLOBUS_XIO_SYSTEM_ERROR_SYSTEM_ERROR = 1024,
52 GLOBUS_XIO_SYSTEM_ERROR_TOO_MANY_FDS,
53 GLOBUS_XIO_SYSTEM_ERROR_ALREADY_REGISTERED,
54 GLOBUS_XIO_SYSTEM_ERROR_OPERATION_CANCELED,
55 GLOBUS_XIO_SYSTEM_ERROR_NOT_REGISTERED
56 } globus_xio_system_error_type_t;
60 GLOBUS_XIO_SYSTEM_FILE = 1,
61 GLOBUS_XIO_SYSTEM_TCP,
62 GLOBUS_XIO_SYSTEM_TCP_LISTENER,
64 } globus_xio_system_type_t;
67 (*globus_xio_system_callback_t)(
68 globus_result_t result,
72 (*globus_xio_system_data_callback_t)(
73 globus_result_t result,
86 globus_xio_system_file_init(
87 globus_xio_system_file_handle_t * handle,
88 globus_xio_system_file_t fd);
97 globus_xio_system_file_destroy(
98 globus_xio_system_file_handle_t handle);
101 globus_xio_system_file_register_read(
102 globus_xio_operation_t op,
103 globus_xio_system_file_handle_t handle,
105 const globus_xio_iovec_t * iov,
107 globus_size_t waitforbytes,
108 globus_xio_system_data_callback_t callback,
112 globus_xio_system_file_register_write(
113 globus_xio_operation_t op,
114 globus_xio_system_file_handle_t handle,
116 const globus_xio_iovec_t * iov,
118 globus_size_t waitforbytes,
119 globus_xio_system_data_callback_t callback,
124 globus_xio_system_file_read(
125 globus_xio_system_file_handle_t handle,
127 const globus_xio_iovec_t * iov,
129 globus_size_t waitforbytes,
130 globus_size_t * nbytes);
133 globus_xio_system_file_write(
134 globus_xio_system_file_handle_t handle,
136 const globus_xio_iovec_t * iov,
138 globus_size_t waitforbytes,
139 globus_size_t * nbytes);
143 globus_xio_system_file_get_position(
144 globus_xio_system_file_t fd);
147 globus_xio_system_file_get_size(
148 globus_xio_system_file_t fd);
150 globus_xio_system_file_t
151 globus_xio_system_convert_stdio(
155 globus_xio_system_file_truncate(
156 globus_xio_system_file_t fd,
160 globus_xio_system_file_open(
161 globus_xio_system_file_t * fd,
162 const char * filename,
167 globus_xio_system_file_close(
168 globus_xio_system_file_t fd);
176 globus_xio_system_socket_init(
177 globus_xio_system_socket_handle_t * handle,
178 globus_xio_system_socket_t socket,
179 globus_xio_system_type_t type);
188 globus_xio_system_socket_destroy(
189 globus_xio_system_socket_handle_t handle);
192 globus_xio_system_socket_register_connect(
193 globus_xio_operation_t op,
194 globus_xio_system_socket_handle_t handle,
195 globus_sockaddr_t * addr,
196 globus_xio_system_callback_t callback,
200 globus_xio_system_socket_register_accept(
201 globus_xio_operation_t op,
202 globus_xio_system_socket_handle_t listener_handle,
203 globus_xio_system_socket_t * out_handle,
204 globus_xio_system_callback_t callback,
212 globus_xio_system_socket_register_read(
213 globus_xio_operation_t op,
214 globus_xio_system_socket_handle_t handle,
215 const globus_xio_iovec_t * iov,
217 globus_size_t waitforbytes,
219 globus_sockaddr_t * out_from,
220 globus_xio_system_data_callback_t callback,
227 globus_xio_system_socket_register_write(
228 globus_xio_operation_t op,
229 globus_xio_system_socket_handle_t handle,
230 const globus_xio_iovec_t * iov,
232 globus_size_t waitforbytes,
234 globus_sockaddr_t * to,
235 globus_xio_system_data_callback_t callback,
240 globus_xio_system_socket_read(
241 globus_xio_system_socket_handle_t handle,
242 const globus_xio_iovec_t * iov,
244 globus_size_t waitforbytes,
246 globus_sockaddr_t * from,
247 globus_size_t * nbytes);
251 globus_xio_system_socket_write(
252 globus_xio_system_socket_handle_t handle,
253 const globus_xio_iovec_t * iov,
255 globus_size_t waitforbytes,
257 globus_sockaddr_t * to,
258 globus_size_t * nbytes);
262 globus_xio_system_socket_create(
263 globus_xio_system_socket_t * socket,
269 globus_xio_system_socket_setsockopt(
270 globus_xio_system_socket_t socket,
274 globus_socklen_t optlen);
277 globus_xio_system_socket_getsockopt(
278 globus_xio_system_socket_t socket,
282 globus_socklen_t * optlen);
285 globus_xio_system_socket_getsockname(
286 globus_xio_system_socket_t socket,
287 struct sockaddr * name,
288 globus_socklen_t * namelen);
291 globus_xio_system_socket_getpeername(
292 globus_xio_system_socket_t socket,
293 struct sockaddr * name,
294 globus_socklen_t * namelen);
297 globus_xio_system_socket_bind(
298 globus_xio_system_socket_t socket,
299 struct sockaddr * addr,
300 globus_socklen_t addrlen);
303 globus_xio_system_socket_listen(
304 globus_xio_system_socket_t socket,
308 globus_xio_system_socket_connect(
309 globus_xio_system_socket_t socket,
310 const struct sockaddr * addr,
311 globus_socklen_t addrlen);
314 globus_xio_system_socket_close(
315 globus_xio_system_socket_t socket);