]> gitweb.factorcode.org Git - factor.git/blob - extra/zeromq/ffi/ffi.factor
Switch to https urls
[factor.git] / extra / zeromq / ffi / ffi.factor
1 ! Copyright (C) 2011-2013 Eungju PARK, John Benediktsson.
2 ! See https://factorcode.org/license.txt for BSD license.
3
4 USING: alien alien.accessors alien.c-types alien.data
5 alien.libraries alien.syntax assocs byte-arrays classes.struct
6 combinators kernel literals math system ;
7
8 IN: zeromq.ffi
9
10 << "zmq" {
11     { [ os windows? ] [ "libzmq.dll" ] }
12     { [ os macosx? ] [ "libzmq.dylib" ] }
13     { [ os unix? ] [ "libzmq.so" ] }
14 } cond cdecl add-library >>
15
16 LIBRARY: zmq
17
18 !
19 ! 0MQ versioning support.
20 !
21
22 ! Run-time API version detection
23 FUNCTION: void zmq_version ( int* major, int* minor, int* patch )
24
25 !
26 ! 0MQ errors.
27 !
28
29 ! A number random enough not to collide with different errno ranges on
30 ! different OSes. The assumption is that error_t is at least 32-bit type.
31 << CONSTANT: ZMQ_HAUSNUMERO 156384712 >>
32
33 ! Native 0MQ error codes.
34 CONSTANT: EFSM $[ ZMQ_HAUSNUMERO 51 + ]
35 CONSTANT: ENOCOMPATPROTO $[ ZMQ_HAUSNUMERO 52 + ]
36 CONSTANT: ETERM $[ ZMQ_HAUSNUMERO 53 + ]
37 CONSTANT: EMTHREAD $[ ZMQ_HAUSNUMERO 54 + ]
38
39 ! This function retrieves the errno as it is known to 0MQ library. The goal
40 ! of this function is to make the code 100% portable, including where 0MQ
41 ! compiled with certain CRT library (on Windows) is linked to an
42 ! application that uses different CRT library.
43 FUNCTION: int zmq_errno ( )
44
45 ! Resolves system errors and 0MQ errors to human-readable string.
46 FUNCTION: c-string zmq_strerror ( int errnum )
47
48 !
49 ! 0MQ infrastructure (a.k.a. context) initialisation & termination.
50 !
51
52 ! New API
53 ! Context options
54 CONSTANT: ZMQ_IO_THREADS  1
55 CONSTANT: ZMQ_MAX_SOCKETS 2
56
57 ! Default for new contexts
58 CONSTANT: ZMQ_IO_THREADS_DFLT  1
59 CONSTANT: ZMQ_MAX_SOCKETS_DFLT 1024
60
61 FUNCTION: void* zmq_ctx_new ( )
62 FUNCTION: int zmq_ctx_destroy ( void* context )
63 FUNCTION: int zmq_ctx_set ( void* context, int option, int optval )
64 FUNCTION: int zmq_ctx_get ( void* context, int option )
65
66 ! Old (legacy) API
67 FUNCTION: void* zmq_init ( int io_threads )
68 FUNCTION: int zmq_term ( void* context )
69
70 !
71 ! 0MQ message definition.
72 !
73
74 FUNCTION: int zmq_msg_init ( void* msg )
75 FUNCTION: int zmq_msg_init_size ( void* msg, size_t size )
76 FUNCTION: int zmq_msg_init_data ( void* msg, void* data, size_t size, void* ffn, void* hint )
77 FUNCTION: int zmq_msg_send ( void* msg, void* s, int flags )
78 FUNCTION: int zmq_msg_recv ( void* msg, void* s, int flags )
79 FUNCTION: int zmq_msg_close ( void* msg )
80 FUNCTION: int zmq_msg_move ( void* dest, void* src )
81 FUNCTION: int zmq_msg_copy ( void* dest, void* src )
82 FUNCTION: void* zmq_msg_data ( void* msg )
83 FUNCTION: size_t zmq_msg_size ( void* msg )
84 FUNCTION: int zmq_msg_more ( void* msg )
85 FUNCTION: int zmq_msg_get ( void* msg, int option )
86 FUNCTION: int zmq_msg_set ( void* msg, int option, int optval )
87
88 !
89 ! 0MQ socket definition.
90 !
91
92 ! Socket types.
93 CONSTANT: ZMQ_PAIR 0
94 CONSTANT: ZMQ_PUB 1
95 CONSTANT: ZMQ_SUB 2
96 CONSTANT: ZMQ_REQ 3
97 CONSTANT: ZMQ_REP 4
98 CONSTANT: ZMQ_DEALER 5
99 CONSTANT: ZMQ_ROUTER 6
100 CONSTANT: ZMQ_PULL 7
101 CONSTANT: ZMQ_PUSH 8
102 CONSTANT: ZMQ_XPUB 9
103 CONSTANT: ZMQ_XSUB 10
104
105 ! Deprecated aliases
106 ALIAS: ZMQ_XREQ ZMQ_DEALER
107 ALIAS: ZMQ_XREP ZMQ_ROUTER
108
109 ! Socket options.
110 CONSTANT: ZMQ_AFFINITY 4
111 CONSTANT: ZMQ_IDENTITY 5
112 CONSTANT: ZMQ_SUBSCRIBE 6
113 CONSTANT: ZMQ_UNSUBSCRIBE 7
114 CONSTANT: ZMQ_RATE 8
115 CONSTANT: ZMQ_RECOVERY_IVL 9
116 CONSTANT: ZMQ_SNDBUF 11
117 CONSTANT: ZMQ_RCVBUF 12
118 CONSTANT: ZMQ_RCVMORE 13
119 CONSTANT: ZMQ_FD 14
120 CONSTANT: ZMQ_EVENTS 15
121 CONSTANT: ZMQ_TYPE 16
122 CONSTANT: ZMQ_LINGER 17
123 CONSTANT: ZMQ_RECONNECT_IVL 18
124 CONSTANT: ZMQ_BACKLOG 19
125 CONSTANT: ZMQ_RECONNECT_IVL_MAX 21
126 CONSTANT: ZMQ_MAXMSGSIZE 22
127 CONSTANT: ZMQ_SNDHWM 23
128 CONSTANT: ZMQ_RCVHWM 24
129 CONSTANT: ZMQ_MULTICAST_HOPS 25
130 CONSTANT: ZMQ_RCVTIMEO 27
131 CONSTANT: ZMQ_SNDTIMEO 28
132 CONSTANT: ZMQ_IPV4ONLY 31
133 CONSTANT: ZMQ_LAST_ENDPOINT 32
134 CONSTANT: ZMQ_ROUTER_MANDATORY 33
135 CONSTANT: ZMQ_TCP_KEEPALIVE 34
136 CONSTANT: ZMQ_TCP_KEEPALIVE_CNT 35
137 CONSTANT: ZMQ_TCP_KEEPALIVE_IDLE 36
138 CONSTANT: ZMQ_TCP_KEEPALIVE_INTVL 37
139 CONSTANT: ZMQ_TCP_ACCEPT_FILTER 38
140 CONSTANT: ZMQ_DELAY_ATTACH_ON_CONNECT 39
141 CONSTANT: ZMQ_XPUB_VERBOSE 40
142
143 ! Message options
144 CONSTANT: ZMQ_MORE 1
145
146 ! Send/recv options.
147 CONSTANT: ZMQ_DONTWAIT 1
148 CONSTANT: ZMQ_SNDMORE 2
149
150 ! Deprecated aliases
151 ALIAS: ZMQ_NOBLOCK ZMQ_DONTWAIT
152 ALIAS: ZMQ_FAIL_UNROUTABLE ZMQ_ROUTER_MANDATORY
153 ALIAS: ZMQ_ROUTER_BEHAVIOR ZMQ_ROUTER_MANDATORY
154
155 !
156 ! 0MQ socket events and monitoring
157 !
158
159 ! Socket transport events (tcp and ipc only)
160 CONSTANT: ZMQ_EVENT_CONNECTED 1
161 CONSTANT: ZMQ_EVENT_CONNECT_DELAYED 2
162 CONSTANT: ZMQ_EVENT_CONNECT_RETRIED 4
163
164 CONSTANT: ZMQ_EVENT_LISTENING 8
165 CONSTANT: ZMQ_EVENT_BIND_FAILED 16
166
167 CONSTANT: ZMQ_EVENT_ACCEPTED 32
168 CONSTANT: ZMQ_EVENT_ACCEPT_FAILED 64
169
170 CONSTANT: ZMQ_EVENT_CLOSED 128
171 CONSTANT: ZMQ_EVENT_CLOSE_FAILED 256
172 CONSTANT: ZMQ_EVENT_DISCONNECTED 512
173
174 CONSTANT: ZMQ_EVENT_ALL flags{
175     ZMQ_EVENT_CONNECTED ZMQ_EVENT_CONNECT_DELAYED
176     ZMQ_EVENT_CONNECT_RETRIED ZMQ_EVENT_LISTENING
177     ZMQ_EVENT_BIND_FAILED ZMQ_EVENT_ACCEPTED
178     ZMQ_EVENT_ACCEPT_FAILED ZMQ_EVENT_CLOSED
179     ZMQ_EVENT_CLOSE_FAILED ZMQ_EVENT_DISCONNECTED
180 }
181
182 ! Socket event data (union member per event)
183 STRUCT: zmq_event_t
184     { event int }
185     { addr c-string }
186     { fd-or-err int } ;
187
188 FUNCTION: void* zmq_socket ( void* ctx, int type )
189 FUNCTION: int zmq_close ( void* s )
190 FUNCTION: int zmq_setsockopt ( void* s, int option, void* optval, size_t optvallen )
191 FUNCTION: int zmq_getsockopt ( void* s, int option, void* optval, size_t* optvallen )
192 FUNCTION: int zmq_bind ( void* s, c-string addr )
193 FUNCTION: int zmq_connect ( void* s, c-string addr )
194 FUNCTION: int zmq_unbind ( void* s, c-string addr )
195 FUNCTION: int zmq_disconnect ( void* s, c-string addr )
196 FUNCTION: int zmq_send ( void* s, void* buf, size_t len, int flags )
197 FUNCTION: int zmq_recv ( void* s, void* buf, size_t len, int flags )
198 FUNCTION: int zmq_socket_monitor ( void* s, c-string addr, int events )
199
200 FUNCTION: int zmq_sendmsg ( void* s, void* msg, int flags )
201 FUNCTION: int zmq_recvmsg ( void* s, void* msg, int flags )
202
203 ! Experimental
204 FUNCTION: int zmq_sendiov ( void* s, void* iov, size_t count, int flags )
205 FUNCTION: int zmq_recviov ( void* s, void* iov, size_t* count, int flags )
206
207 !
208 ! I/O multiplexing.
209 !
210
211 CONSTANT: ZMQ_POLLIN 1
212 CONSTANT: ZMQ_POLLOUT 2
213 CONSTANT: ZMQ_POLLERR 4
214
215 ! FIXME: { fd SOCKET } on Windows
216 STRUCT: zmq_pollitem_t
217     { socket void* }
218     { fd int }
219     { events short }
220     { revents short } ;
221
222 FUNCTION: int zmq_poll ( zmq_pollitem_t* items, int nitems, long timeout )
223
224 ! Built-in message proxy (3-way)
225
226 FUNCTION: int zmq_proxy ( void* frontend, void* backend, void* capture )
227
228 ! Deprecated aliases
229 CONSTANT: ZMQ_STREAMER 1
230 CONSTANT: ZMQ_FORWARDER 2
231 CONSTANT: ZMQ_QUEUE 3
232 ! Deprecated method
233 FUNCTION: int zmq_device ( int type, void* frontend, void* backend )