summaryrefslogtreecommitdiff
path: root/ext/mysqli/mysqli_profiler_com.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/mysqli/mysqli_profiler_com.c')
-rw-r--r--ext/mysqli/mysqli_profiler_com.c98
1 files changed, 98 insertions, 0 deletions
diff --git a/ext/mysqli/mysqli_profiler_com.c b/ext/mysqli/mysqli_profiler_com.c
new file mode 100644
index 0000000000..8a4f18d2d9
--- /dev/null
+++ b/ext/mysqli/mysqli_profiler_com.c
@@ -0,0 +1,98 @@
+/*
+ +----------------------------------------------------------------------+
+ | PHP Version 5 |
+ +----------------------------------------------------------------------+
+ | Copyright (c) 1997-2003 The PHP Group |
+ +----------------------------------------------------------------------+
+ | This source file is subject to version 2.02 of the PHP license, |
+ | that is bundled with this package in the file LICENSE, and is |
+ | available at through the world-wide-web at |
+ | http://www.php.net/license/2_02.txt. |
+ | If you did not receive a copy of the PHP license and are unable to |
+ | obtain it through the world-wide-web, please send a note to |
+ | license@php.net so we can mail you a copy immediately. |
+ +----------------------------------------------------------------------+
+ | Author: Georg Richter <georg@php.net> |
+ +----------------------------------------------------------------------+
+*/
+
+#include <string.h>
+#include <sys/types.h>
+#include <errno.h>
+#ifndef PHP_WIN32
+#include <unistd.h>
+#endif
+
+#ifdef PHP_WIN32
+# include <winsock.h>
+# include <process.h>
+# include <direct.h>
+# include "win32/time.h"
+#define PATH_MAX MAX_PATH
+#else
+# include <sys/socket.h>
+# include <netinet/in.h>
+# include <arpa/inet.h>
+# include <netdb.h>
+#endif
+
+#include "mysqli_profiler_com.h"
+
+#ifdef PHP_WIN32
+int inet_aton(const char *cp, struct in_addr *inp)
+{
+ inp->s_addr = inet_addr(cp);
+ if (inp->s_addr == INADDR_NONE) {
+ return 0;
+ }
+ return 1;
+}
+#endif
+
+/*
+ * Converts a host name to an IP address. */
+static int lookup_hostname (const char *addr, struct in_addr *in)
+{
+ struct hostent *host_info;
+
+ if (!inet_aton(addr, in)) {
+ host_info = gethostbyname(addr);
+ if (host_info == 0) {
+ /* Error: unknown host */
+ return -1;
+ }
+ *in = *((struct in_addr *) host_info->h_addr);
+ }
+ return 0;
+}
+/* }}} */
+
+int php_mysqli_create_socket(const char *hostname, int dport)
+{
+ struct sockaddr_in address;
+ int err = -1;
+ int sockfd;
+
+ memset(&address, 0, sizeof(address));
+ lookup_hostname(hostname, &address.sin_addr);
+ address.sin_family = AF_INET;
+ address.sin_port = htons((unsigned short)dport);
+
+ sockfd = socket(address.sin_family, SOCK_STREAM, 0);
+ if (sockfd == SOCK_ERR) {
+ return -1;
+ }
+ while ((err = connect(sockfd, (struct sockaddr *) &address,
+ sizeof(address))) == SOCK_ERR && errno == EAGAIN);
+
+ if (err < 0) {
+ PR_SCLOSE(sockfd);
+ return -1;
+ }
+ return sockfd;
+}
+
+void php_mysqli_close_socket(int socket)
+{
+ PR_SCLOSE(socket);
+}