Skip to content

Commit 428bd3d

Browse files
LeSuissecmb69
authored andcommitted
Add stubs for ext-sockets
1 parent cc8739c commit 428bd3d

File tree

4 files changed

+380
-245
lines changed

4 files changed

+380
-245
lines changed

ext/sockets/sockets.c

+8-217
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@
6363
#include "sockaddr_conv.h"
6464
#include "multicast.h"
6565
#include "sendrecvmsg.h"
66+
#include "sockets_arginfo.h"
6667

6768
ZEND_DECLARE_MODULE_GLOBALS(sockets)
6869

@@ -97,215 +98,6 @@ static int le_socket;
9798
static int le_addrinfo;
9899
#define le_addrinfo_name php_sockets_le_addrinfo_name
99100

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-
309101
static PHP_GINIT_FUNCTION(sockets);
310102
static PHP_GSHUTDOWN_FUNCTION(sockets);
311103
static PHP_MINIT_FUNCTION(sockets);
@@ -960,15 +752,16 @@ static int php_sock_array_from_fd_set(zval *sock_array, fd_set *fds) /* {{{ */
960752
Runs the select() system call on the sets mentioned with a timeout specified by tv_sec and tv_usec */
961753
PHP_FUNCTION(socket_select)
962754
{
963-
zval *r_array, *w_array, *e_array, *sec;
755+
zval *r_array, *w_array, *e_array;
964756
struct timeval tv;
965757
struct timeval *tv_p = NULL;
966758
fd_set rfds, wfds, efds;
967759
PHP_SOCKET max_fd = 0;
968760
int retval, sets = 0;
969-
zend_long usec = 0;
761+
zend_long sec, usec = 0;
762+
zend_bool sec_is_null = 0;
970763

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) {
972765
return;
973766
}
974767

@@ -988,15 +781,13 @@ PHP_FUNCTION(socket_select)
988781
PHP_SAFE_MAX_FD(max_fd, 0); /* someone needs to make this look more like stream_socket_select */
989782

990783
/* 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) {
994785
/* Solaris + BSD do not like microsecond values which are >= 1 sec */
995786
if (usec > 999999) {
996-
tv.tv_sec = s + (usec / 1000000);
787+
tv.tv_sec = sec + (usec / 1000000);
997788
tv.tv_usec = usec % 1000000;
998789
} else {
999-
tv.tv_sec = s;
790+
tv.tv_sec = sec;
1000791
tv.tv_usec = usec;
1001792
}
1002793

0 commit comments

Comments
 (0)