33# define IS_INVALID_SOCKET(a) (a->bsd_socket < 0)
36#define PHP_SOCKETS_VERSION PHP_VERSION
39#define phpext_sockets_ptr &sockets_module_entry
44#ifdef HAVE_SYS_SOCKET_H
45#include <sys/socket.h>
50typedef int PHP_SOCKET;
52typedef SOCKET PHP_SOCKET;
56# ifdef PHP_SOCKETS_EXPORTS
57# define PHP_SOCKETS_API __declspec(dllexport)
59# define PHP_SOCKETS_API __declspec(dllimport)
61#elif defined(__GNUC__) && __GNUC__ >= 4
62# define PHP_SOCKETS_API __attribute__ ((visibility("default")))
64# define PHP_SOCKETS_API
70 PHP_SOCKET bsd_socket;
80static inline php_socket *socket_from_obj(
zend_object *obj) {
81 return (php_socket *)((
char *)(obj) -
XtOffsetOf(php_socket, std));
84#define Z_SOCKET_P(zv) socket_from_obj(Z_OBJ_P(zv))
86#define ENSURE_SOCKET_VALID(php_sock) do { \
87 if (IS_INVALID_SOCKET(php_sock)) { \
88 zend_argument_error(NULL, 1, "has already been closed"); \
100#define PHP_SOCKET_ERROR(socket, msg, errn) \
103 (socket)->error = _err; \
104 SOCKETS_G(last_error) = _err; \
105 if (_err != EAGAIN && _err != EWOULDBLOCK && _err != EINPROGRESS) { \
106 php_error_docref(NULL, E_WARNING, "%s [%d]: %s", msg, _err, sockets_strerror(_err)); \
114 uint32_t wsa_child_count;
120#define SOCKETS_G(v) ZEND_MODULE_GLOBALS_ACCESSOR(sockets, v)
132#define phpext_sockets_ptr NULL
135#if defined(_AIX) && !defined(HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY)
136# define ss_family __ss_family
141#define MSG_EOF MSG_FIN
147#define MSG_WAITALL 0x00000100
149#define MSG_WAITALL 0x00000000
153#define PHP_NORMAL_READ 0x0001
154#define PHP_BINARY_READ 0x0002
157#define PHP_SOCKET_EINTR WSAEINTR
159#define PHP_SOCKET_EINTR EINTR
163#define PHP_SOCKET_EBADF WSAEBADF
165#define PHP_SOCKET_EBADF EBADF
169#define PHP_SOCKET_EACCES WSAEACCES
171#define PHP_SOCKET_EACCES EACCES
175#define PHP_SOCKET_EFAULT WSAEFAULT
177#define PHP_SOCKET_EFAULT EFAULT
181#define PHP_SOCKET_EINVAL WSAEINVAL
183#define PHP_SOCKET_EINVAL EINVAL
187#define PHP_SOCKET_ENFILE ENFILE
191#define PHP_SOCKET_EMFILE WSAEMFILE
193#define PHP_SOCKET_EMFILE EMFILE
197#define PHP_SOCKET_EWOULDBLOCK WSAEWOULDBLOCK
198#elif defined(EWOULDBLOCK)
199#define PHP_SOCKET_EWOULDBLOCK EWOULDBLOCK
203#define PHP_SOCKET_EINPROGRESS WSAEINPROGRESS
204#elif defined(EINPROGRESS)
205#define PHP_SOCKET_EINPROGRESS EINPROGRESS
209#define PHP_SOCKET_EALREADY WSAEALREADY
210#elif defined(EALREADY)
211#define PHP_SOCKET_EALREADY EALREADY
215#define PHP_SOCKET_ENOTSOCK WSAENOTSOCK
216#elif defined(ENOTSOCK)
217#define PHP_SOCKET_ENOTSOCK ENOTSOCK
221#define PHP_SOCKET_EDESTADDRREQ WSAEDESTADDRREQ
222#elif defined(EDESTADDRREQ)
223#define PHP_SOCKET_EDESTADDRREQ EDESTADDRREQ
227#define PHP_SOCKET_EMSGSIZE WSAEMSGSIZE
228#elif defined(EMSGSIZE)
229#define PHP_SOCKET_EMSGSIZE EMSGSIZE
233#define PHP_SOCKET_EPROTOTYPE WSAEPROTOTYPE
234#elif defined(EPROTOTYPE)
235#define PHP_SOCKET_EPROTOTYPE EPROTOTYPE
239#define PHP_SOCKET_ENOPROTOOPT WSAENOPROTOOPT
240#elif defined(ENOPROTOOPT)
241#define PHP_SOCKET_ENOPROTOOPT ENOPROTOOPT
245#define PHP_SOCKET_EPROTONOSUPPORT WSAEPROTONOSUPPORT
246#elif defined(EPROTONOSUPPORT)
247#define PHP_SOCKET_EPROTONOSUPPORT EPROTONOSUPPORT
251#define PHP_SOCKET_ESOCKTNOSUPPORT WSAESOCKTNOSUPPORT
252#elif defined(ESOCKTNOSUPPORT)
253#define PHP_SOCKET_ESOCKTNOSUPPORT ESOCKTNOSUPPORT
257#define PHP_SOCKET_EOPNOTSUPP WSAEOPNOTSUPP
258#elif defined(EOPNOTSUPP)
259#define PHP_SOCKET_EOPNOTSUPP EOPNOTSUPP
263#define PHP_SOCKET_EPFNOSUPPORT WSAEPFNOSUPPORT
264#elif defined(EPFNOSUPPORT)
265#define PHP_SOCKET_EPFNOSUPPORT EPFNOSUPPORT
269#define PHP_SOCKET_EAFNOSUPPORT WSAEAFNOSUPPORT
270#elif defined(EAFNOSUPPORT)
271#define PHP_SOCKET_EAFNOSUPPORT EAFNOSUPPORT
275#define PHP_SOCKET_EADDRINUSE WSAEADDRINUSE
276#elif defined(EADDRINUSE)
277#define PHP_SOCKET_EADDRINUSE EADDRINUSE
281#define PHP_SOCKET_EADDRNOTAVAIL WSAEADDRNOTAVAIL
282#elif defined(EADDRNOTAVAIL)
283#define PHP_SOCKET_EADDRNOTAVAIL EADDRNOTAVAIL
287#define PHP_SOCKET_ENETDOWN WSAENETDOWN
288#elif defined(ENETDOWN)
289#define PHP_SOCKET_ENETDOWN ENETDOWN
293#define PHP_SOCKET_ENETUNREACH WSAENETUNREACH
294#elif defined(ENETUNREACH)
295#define PHP_SOCKET_ENETUNREACH ENETUNREACH
299#define PHP_SOCKET_ENETRESET WSAENETRESET
300#elif defined(ENETRESET)
301#define PHP_SOCKET_ENETRESET ENETRESET
305#define PHP_SOCKET_ECONNABORTED WSAECONNABORTED
306#elif defined(ECONNABORTED)
307#define PHP_SOCKET_ECONNABORTED ECONNABORTED
311#define PHP_SOCKET_ECONNRESET WSAECONNRESET
312#elif defined(ECONNRESET)
313#define PHP_SOCKET_ECONNRESET ECONNRESET
317#define PHP_SOCKET_ENOBUFS WSAENOBUFS
318#elif defined(ENOBUFS)
319#define PHP_SOCKET_ENOBUFS ENOBUFS
323#define PHP_SOCKET_EISCONN WSAEISCONN
324#elif defined(EISCONN)
325#define PHP_SOCKET_EISCONN EISCONN
329#define PHP_SOCKET_ENOTCONN WSAENOTCONN
330#elif defined(ENOTCONN)
331#define PHP_SOCKET_ENOTCONN ENOTCONN
335#define PHP_SOCKET_ESHUTDOWN WSAESHUTDOWN
336#elif defined(ESHUTDOWN)
337#define PHP_SOCKET_ESHUTDOWN ESHUTDOWN
341#define PHP_SOCKET_ETOOMANYREFS WSAETOOMANYREFS
342#elif defined(ETOOMANYREFS)
343#define PHP_SOCKET_ETOOMANYREFS ETOOMANYREFS
347#define PHP_SOCKET_ETIMEDOUT WSAETIMEDOUT
348#elif defined(ETIMEDOUT)
349#define PHP_SOCKET_ETIMEDOUT ETIMEDOUT
353#define PHP_SOCKET_ECONNREFUSED WSAECONNREFUSED
354#elif defined(ECONNREFUSED)
355#define PHP_SOCKET_ECONNREFUSED ECONNREFUSED
359#define PHP_SOCKET_ELOOP WSAELOOP
361#define PHP_SOCKET_ELOOP ELOOP
365#define PHP_SOCKET_ENAMETOOLONG WSAENAMETOOLONG
366#elif defined(ENAMETOOLONG)
367#define PHP_SOCKET_ENAMETOOLONG ENAMETOOLONG
371#define PHP_SOCKET_EHOSTDOWN WSAEHOSTDOWN
372#elif defined(EHOSTDOWN)
373#define PHP_SOCKET_EHOSTDOWN EHOSTDOWN
377#define PHP_SOCKET_EHOSTUNREACH WSAEHOSTUNREACH
378#elif defined(EHOSTUNREACH)
379#define PHP_SOCKET_EHOSTUNREACH EHOSTUNREACH
383#define PHP_SOCKET_ENOTEMPTY WSAENOTEMPTY
384#elif defined(ENOTEMPTY)
385#define PHP_SOCKET_ENOTEMPTY ENOTEMPTY
389#define PHP_SOCKET_EUSERS WSAEUSERS
391#define PHP_SOCKET_EUSERS EUSERS
395#define PHP_SOCKET_EDQUOT WSAEDQUOT
397#define PHP_SOCKET_EDQUOT EDQUOT
401#define PHP_SOCKET_EREMOTE WSAEREMOTE
402#elif defined(EREMOTE)
403#define PHP_SOCKET_EREMOTE EREMOTE
zend_class_entry * socket_ce
char * sockets_strerror(int error)
zend_module_entry sockets_module_entry
bool socket_import_file_descriptor(PHP_SOCKET socket, php_socket *retsock)
#define ZEND_END_MODULE_GLOBALS(module_name)
#define ZEND_EXTERN_MODULE_GLOBALS(module_name)
#define ZEND_BEGIN_MODULE_GLOBALS(module_name)
struct _zend_module_entry zend_module_entry
#define XtOffsetOf(s_type, field)
struct _zend_class_entry zend_class_entry
struct _zend_object zend_object
struct _zend_array HashTable