63
63
#include "sockaddr_conv.h"
64
64
#include "multicast.h"
65
65
#include "sendrecvmsg.h"
66
+ #include "sockets_arginfo.h"
66
67
67
68
ZEND_DECLARE_MODULE_GLOBALS (sockets )
68
69
@@ -97,215 +98,6 @@ static int le_socket;
97
98
static int le_addrinfo ;
98
99
#define le_addrinfo_name php_sockets_le_addrinfo_name
99
100
100
- /* {{{ arginfo */
101
- ZEND_BEGIN_ARG_INFO_EX (arginfo_socket_select , 0 , 0 , 4 )
102
- ZEND_ARG_INFO (1 , read_fds )
103
- ZEND_ARG_INFO (1 , write_fds )
104
- ZEND_ARG_INFO (1 , except_fds )
105
- ZEND_ARG_INFO (0 , tv_sec )
106
- ZEND_ARG_INFO (0 , tv_usec )
107
- ZEND_END_ARG_INFO ()
108
-
109
- ZEND_BEGIN_ARG_INFO_EX (arginfo_socket_create_listen , 0 , 0 , 1 )
110
- ZEND_ARG_INFO (0 , port )
111
- ZEND_ARG_INFO (0 , backlog )
112
- ZEND_END_ARG_INFO ()
113
-
114
- ZEND_BEGIN_ARG_INFO_EX (arginfo_socket_accept , 0 , 0 , 1 )
115
- ZEND_ARG_INFO (0 , socket )
116
- ZEND_END_ARG_INFO ()
117
-
118
- ZEND_BEGIN_ARG_INFO_EX (arginfo_socket_set_nonblock , 0 , 0 , 1 )
119
- ZEND_ARG_INFO (0 , socket )
120
- ZEND_END_ARG_INFO ()
121
-
122
- ZEND_BEGIN_ARG_INFO_EX (arginfo_socket_set_block , 0 , 0 , 1 )
123
- ZEND_ARG_INFO (0 , socket )
124
- ZEND_END_ARG_INFO ()
125
-
126
- ZEND_BEGIN_ARG_INFO_EX (arginfo_socket_listen , 0 , 0 , 1 )
127
- ZEND_ARG_INFO (0 , socket )
128
- ZEND_ARG_INFO (0 , backlog )
129
- ZEND_END_ARG_INFO ()
130
-
131
- ZEND_BEGIN_ARG_INFO_EX (arginfo_socket_close , 0 , 0 , 1 )
132
- ZEND_ARG_INFO (0 , socket )
133
- ZEND_END_ARG_INFO ()
134
-
135
- ZEND_BEGIN_ARG_INFO_EX (arginfo_socket_write , 0 , 0 , 2 )
136
- ZEND_ARG_INFO (0 , socket )
137
- ZEND_ARG_INFO (0 , buf )
138
- ZEND_ARG_INFO (0 , length )
139
- ZEND_END_ARG_INFO ()
140
-
141
- ZEND_BEGIN_ARG_INFO_EX (arginfo_socket_read , 0 , 0 , 2 )
142
- ZEND_ARG_INFO (0 , socket )
143
- ZEND_ARG_INFO (0 , length )
144
- ZEND_ARG_INFO (0 , type )
145
- ZEND_END_ARG_INFO ()
146
-
147
- ZEND_BEGIN_ARG_INFO_EX (arginfo_socket_getsockname , 0 , 0 , 2 )
148
- ZEND_ARG_INFO (0 , socket )
149
- ZEND_ARG_INFO (1 , addr )
150
- ZEND_ARG_INFO (1 , port )
151
- ZEND_END_ARG_INFO ()
152
-
153
- ZEND_BEGIN_ARG_INFO_EX (arginfo_socket_getpeername , 0 , 0 , 2 )
154
- ZEND_ARG_INFO (0 , socket )
155
- ZEND_ARG_INFO (1 , addr )
156
- ZEND_ARG_INFO (1 , port )
157
- ZEND_END_ARG_INFO ()
158
-
159
- ZEND_BEGIN_ARG_INFO_EX (arginfo_socket_create , 0 , 0 , 3 )
160
- ZEND_ARG_INFO (0 , domain )
161
- ZEND_ARG_INFO (0 , type )
162
- ZEND_ARG_INFO (0 , protocol )
163
- ZEND_END_ARG_INFO ()
164
-
165
- ZEND_BEGIN_ARG_INFO_EX (arginfo_socket_connect , 0 , 0 , 2 )
166
- ZEND_ARG_INFO (0 , socket )
167
- ZEND_ARG_INFO (0 , addr )
168
- ZEND_ARG_INFO (0 , port )
169
- ZEND_END_ARG_INFO ()
170
-
171
- ZEND_BEGIN_ARG_INFO_EX (arginfo_socket_strerror , 0 , 0 , 1 )
172
- ZEND_ARG_INFO (0 , errno )
173
- ZEND_END_ARG_INFO ()
174
-
175
- ZEND_BEGIN_ARG_INFO_EX (arginfo_socket_bind , 0 , 0 , 2 )
176
- ZEND_ARG_INFO (0 , socket )
177
- ZEND_ARG_INFO (0 , addr )
178
- ZEND_ARG_INFO (0 , port )
179
- ZEND_END_ARG_INFO ()
180
-
181
- ZEND_BEGIN_ARG_INFO_EX (arginfo_socket_recv , 0 , 0 , 4 )
182
- ZEND_ARG_INFO (0 , socket )
183
- ZEND_ARG_INFO (1 , buf )
184
- ZEND_ARG_INFO (0 , len )
185
- ZEND_ARG_INFO (0 , flags )
186
- ZEND_END_ARG_INFO ()
187
-
188
- ZEND_BEGIN_ARG_INFO_EX (arginfo_socket_send , 0 , 0 , 4 )
189
- ZEND_ARG_INFO (0 , socket )
190
- ZEND_ARG_INFO (0 , buf )
191
- ZEND_ARG_INFO (0 , len )
192
- ZEND_ARG_INFO (0 , flags )
193
- ZEND_END_ARG_INFO ()
194
-
195
- ZEND_BEGIN_ARG_INFO_EX (arginfo_socket_recvfrom , 0 , 0 , 5 )
196
- ZEND_ARG_INFO (0 , socket )
197
- ZEND_ARG_INFO (1 , buf )
198
- ZEND_ARG_INFO (0 , len )
199
- ZEND_ARG_INFO (0 , flags )
200
- ZEND_ARG_INFO (1 , name )
201
- ZEND_ARG_INFO (1 , port )
202
- ZEND_END_ARG_INFO ()
203
-
204
- ZEND_BEGIN_ARG_INFO_EX (arginfo_socket_sendto , 0 , 0 , 5 )
205
- ZEND_ARG_INFO (0 , socket )
206
- ZEND_ARG_INFO (0 , buf )
207
- ZEND_ARG_INFO (0 , len )
208
- ZEND_ARG_INFO (0 , flags )
209
- ZEND_ARG_INFO (0 , addr )
210
- ZEND_ARG_INFO (0 , port )
211
- ZEND_END_ARG_INFO ()
212
-
213
- ZEND_BEGIN_ARG_INFO_EX (arginfo_socket_get_option , 0 , 0 , 3 )
214
- ZEND_ARG_INFO (0 , socket )
215
- ZEND_ARG_INFO (0 , level )
216
- ZEND_ARG_INFO (0 , optname )
217
- ZEND_END_ARG_INFO ()
218
-
219
- ZEND_BEGIN_ARG_INFO_EX (arginfo_socket_set_option , 0 , 0 , 4 )
220
- ZEND_ARG_INFO (0 , socket )
221
- ZEND_ARG_INFO (0 , level )
222
- ZEND_ARG_INFO (0 , optname )
223
- ZEND_ARG_INFO (0 , optval )
224
- ZEND_END_ARG_INFO ()
225
-
226
- #ifdef HAVE_SOCKETPAIR
227
- ZEND_BEGIN_ARG_INFO_EX (arginfo_socket_create_pair , 0 , 0 , 4 )
228
- ZEND_ARG_INFO (0 , domain )
229
- ZEND_ARG_INFO (0 , type )
230
- ZEND_ARG_INFO (0 , protocol )
231
- ZEND_ARG_INFO (1 , fd )
232
- ZEND_END_ARG_INFO ()
233
- #endif
234
-
235
- #ifdef HAVE_SHUTDOWN
236
- ZEND_BEGIN_ARG_INFO_EX (arginfo_socket_shutdown , 0 , 0 , 1 )
237
- ZEND_ARG_INFO (0 , socket )
238
- ZEND_ARG_INFO (0 , how )
239
- ZEND_END_ARG_INFO ()
240
- #endif
241
-
242
- ZEND_BEGIN_ARG_INFO_EX (arginfo_socket_last_error , 0 , 0 , 0 )
243
- ZEND_ARG_INFO (0 , socket )
244
- ZEND_END_ARG_INFO ()
245
-
246
- ZEND_BEGIN_ARG_INFO_EX (arginfo_socket_clear_error , 0 , 0 , 0 )
247
- ZEND_ARG_INFO (0 , socket )
248
- ZEND_END_ARG_INFO ()
249
-
250
- ZEND_BEGIN_ARG_INFO_EX (arginfo_socket_import_stream , 0 , 0 , 1 )
251
- ZEND_ARG_INFO (0 , stream )
252
- ZEND_END_ARG_INFO ()
253
-
254
- ZEND_BEGIN_ARG_INFO_EX (arginfo_socket_export_stream , 0 , 0 , 1 )
255
- ZEND_ARG_INFO (0 , socket )
256
- ZEND_END_ARG_INFO ()
257
-
258
- ZEND_BEGIN_ARG_INFO_EX (arginfo_socket_sendmsg , 0 , 0 , 3 )
259
- ZEND_ARG_INFO (0 , socket )
260
- ZEND_ARG_INFO (0 , msghdr )
261
- ZEND_ARG_INFO (0 , flags )
262
- ZEND_END_ARG_INFO ()
263
-
264
- ZEND_BEGIN_ARG_INFO_EX (arginfo_socket_recvmsg , 0 , 0 , 3 )
265
- ZEND_ARG_INFO (0 , socket )
266
- ZEND_ARG_INFO (1 , msghdr )
267
- ZEND_ARG_INFO (0 , flags )
268
- ZEND_END_ARG_INFO ()
269
-
270
- ZEND_BEGIN_ARG_INFO_EX (arginfo_socket_cmsg_space , 0 , 0 , 2 )
271
- ZEND_ARG_INFO (0 , level )
272
- ZEND_ARG_INFO (0 , type )
273
- ZEND_END_ARG_INFO ()
274
-
275
- ZEND_BEGIN_ARG_INFO_EX (arginfo_socket_addrinfo_lookup , 0 , 0 , 1 )
276
- ZEND_ARG_INFO (0 , host )
277
- ZEND_ARG_INFO (0 , service )
278
- ZEND_ARG_INFO (0 , hints )
279
- ZEND_END_ARG_INFO ()
280
-
281
- ZEND_BEGIN_ARG_INFO_EX (arginfo_socket_addrinfo_connect , 0 , 0 , 1 )
282
- ZEND_ARG_INFO (0 , addr )
283
- ZEND_END_ARG_INFO ()
284
-
285
- ZEND_BEGIN_ARG_INFO_EX (arginfo_socket_addrinfo_bind , 0 , 0 , 1 )
286
- ZEND_ARG_INFO (0 , addr )
287
- ZEND_END_ARG_INFO ()
288
-
289
- ZEND_BEGIN_ARG_INFO_EX (arginfo_socket_addrinfo_explain , 0 , 0 , 1 )
290
- ZEND_ARG_INFO (0 , addr )
291
- ZEND_END_ARG_INFO ()
292
-
293
- #ifdef PHP_WIN32
294
- ZEND_BEGIN_ARG_INFO_EX (arginfo_socket_wsaprotocol_info_export , 0 , 0 , 2 )
295
- ZEND_ARG_INFO (0 , socket )
296
- ZEND_ARG_INFO (0 , target_pid )
297
- ZEND_END_ARG_INFO ()
298
-
299
- ZEND_BEGIN_ARG_INFO_EX (arginfo_socket_wsaprotocol_info_import , 0 , 0 , 1 )
300
- ZEND_ARG_INFO (0 , info_id )
301
- ZEND_END_ARG_INFO ()
302
-
303
- ZEND_BEGIN_ARG_INFO_EX (arginfo_socket_wsaprotocol_info_release , 0 , 0 , 1 )
304
- ZEND_ARG_INFO (0 , info_id )
305
- ZEND_END_ARG_INFO ()
306
- #endif
307
- /* }}} */
308
-
309
101
static PHP_GINIT_FUNCTION (sockets );
310
102
static PHP_GSHUTDOWN_FUNCTION (sockets );
311
103
static PHP_MINIT_FUNCTION (sockets );
@@ -960,15 +752,16 @@ static int php_sock_array_from_fd_set(zval *sock_array, fd_set *fds) /* {{{ */
960
752
Runs the select() system call on the sets mentioned with a timeout specified by tv_sec and tv_usec */
961
753
PHP_FUNCTION (socket_select )
962
754
{
963
- zval * r_array , * w_array , * e_array , * sec ;
755
+ zval * r_array , * w_array , * e_array ;
964
756
struct timeval tv ;
965
757
struct timeval * tv_p = NULL ;
966
758
fd_set rfds , wfds , efds ;
967
759
PHP_SOCKET max_fd = 0 ;
968
760
int retval , sets = 0 ;
969
- zend_long usec = 0 ;
761
+ zend_long sec , usec = 0 ;
762
+ zend_bool sec_is_null = 0 ;
970
763
971
- if (zend_parse_parameters (ZEND_NUM_ARGS (), "a!a!a!z !|l" , & r_array , & w_array , & e_array , & sec , & usec ) == FAILURE ) {
764
+ if (zend_parse_parameters (ZEND_NUM_ARGS (), "a!a!a!l !|l" , & r_array , & w_array , & e_array , & sec , & sec_is_null , & usec ) == FAILURE ) {
972
765
return ;
973
766
}
974
767
@@ -988,15 +781,13 @@ PHP_FUNCTION(socket_select)
988
781
PHP_SAFE_MAX_FD (max_fd , 0 ); /* someone needs to make this look more like stream_socket_select */
989
782
990
783
/* If seconds is not set to null, build the timeval, else we wait indefinitely */
991
- if (sec != NULL ) {
992
- zend_long s = zval_get_long (sec );
993
-
784
+ if (!sec_is_null ) {
994
785
/* Solaris + BSD do not like microsecond values which are >= 1 sec */
995
786
if (usec > 999999 ) {
996
- tv .tv_sec = s + (usec / 1000000 );
787
+ tv .tv_sec = sec + (usec / 1000000 );
997
788
tv .tv_usec = usec % 1000000 ;
998
789
} else {
999
- tv .tv_sec = s ;
790
+ tv .tv_sec = sec ;
1000
791
tv .tv_usec = usec ;
1001
792
}
1002
793
0 commit comments