]> granicus.if.org Git - php/commitdiff
A add much more useful select(2) implementation than is provided by
authorWez Furlong <wez@php.net>
Sun, 16 Feb 2003 03:48:49 +0000 (03:48 +0000)
committerWez Furlong <wez@php.net>
Sun, 16 Feb 2003 03:48:49 +0000 (03:48 +0000)
windows sockets.  The winsock implementation will only work with sockets;
our implementation works with sockets and file descriptors.
By association, stream_select() will now operate correctly with files, pipes and sockets.

This change required linking against the winsock2 library.  In terms of
compatibility, only older versions of windows 95 do not have winsock2
installed by default.  It is available as a redistributable file, and is most likely installed by any OS patches (eg: Internet Explorer) applied by the user.

Also, add a win32 compatible pipe test when opening a stream from a pipe.  This test will only work on NT, win2k and XP platforms.  Without this test, interleaved fread() and select() calls would cause the read buffer to be clobbered.  I will be working on a fix for this issue for win9x.

30 files changed:
ext/curl/interface.c
ext/curl/streams.c
ext/fbsql/php_fbsql.c
ext/ftp/ftp.c
ext/hyperwave/hg_comm.c
ext/hyperwave/hw.c
ext/imap/php_imap.c
ext/ldap/ldap.c
ext/mcal/php_mcal.c
ext/mysql/php_mysql.c
ext/odbc/php_odbc.c
ext/rpc/com/com_wrapper.c
ext/snmp/snmp.c
ext/standard/dns.c
ext/standard/file.c
ext/standard/fsock.c
ext/standard/ftp_fopen_wrapper.c
ext/standard/http_fopen_wrapper.c
ext/standard/pack.c
ext/zlib/zlib.c
main/fopen_wrappers.c
main/mergesort.c
main/network.c
main/php.h
main/php_open_temporary_file.c
main/streams.c
run-tests.php
win32/php4dllts.dsp
win32/sendmail.c
win32/time.h

index 2b5c48a61e9c2c701071b2ee54b4b6e8356cb9b6..3286543f516d0b05e06d1e0353873b3bba4d81f1 100644 (file)
@@ -30,7 +30,7 @@
 #include <string.h>
 
 #ifdef PHP_WIN32
-#include <winsock.h>
+#include <winsock2.h>
 #include <sys/types.h>
 #endif
 
index 58695bd50ae7033f48145b00da94458bf7631692..ed5774931804032431e9bd3595ed0cdf1426d865 100644 (file)
@@ -36,7 +36,7 @@
 #include <string.h>
 
 #ifdef PHP_WIN32
-#include <winsock.h>
+#include <winsock2.h>
 #include <sys/types.h>
 #endif
 
index df19e70a9d5a21d8b4be71e7ffcb3a47ab8f0908..0b278f2d02f0d9ba9fb77f2862a76342ece1ed64 100644 (file)
@@ -43,7 +43,7 @@
 #include "ext/standard/php_string.h"
 
 #ifdef PHP_WIN32
-#include <winsock.h>
+#include <winsock2.h>
 #else
 #include <php_config.h>
 
index 1ebce4e4707e3f5d45430c4095521614b1757883..233c832508d3bd9c03e4408eed8de046e5c5677b 100644 (file)
@@ -33,7 +33,7 @@
 #include <string.h>
 #include <time.h>
 #ifdef PHP_WIN32
-#include <winsock.h>
+#include <winsock2.h>
 #elif defined(NETWARE)
 #ifdef USE_WINSOCK    /* Modified to use Winsock (NOVSOCK2.H), atleast for now */
 #include <novsock2.h>
index 856b1c1bfa1d6eff9938d6698e96789cd91dfe55..5aaae3dcfd2612d9ced2165c64653ae11c91e11f 100644 (file)
@@ -31,7 +31,7 @@
 #include <string.h> 
 #include <sys/types.h>
 #ifdef PHP_WIN32
-# include <winsock.h>
+# include <winsock2.h>
 # define EWOULDBLOCK WSAEWOULDBLOCK
 # define ETIMEDOUT WSAETIMEDOUT
 # define bcopy memcpy
index 4975b9586feae8d34566552830501ab5955243a7..8859e13952a3b8044af02295dac19a0d7e6e80cc 100644 (file)
@@ -34,7 +34,7 @@
 #include "SAPI.h"
 
 #ifdef PHP_WIN32
-#include <winsock.h>
+#include <winsock2.h>
 #endif
 
 #if HYPERWAVE
index e43f513f98ed6d3c52f542a5812e089858727e97..77c9aceb2a16780adf895e43b84ba5f114ce655c 100644 (file)
@@ -50,7 +50,7 @@
 #include <signal.h>
 
 #ifdef PHP_WIN32
-#include <winsock.h>
+#include <winsock2.h>
 #include <stdlib.h>
 #include "win32/sendmail.h"
 MAILSTREAM DEFAULTPROTO;
index 96adc911d3f1e408079e299316c3da136ea46b63..a4dbca40bcbe20f46cdee738d9880b3739b080eb 100644 (file)
@@ -46,7 +46,7 @@
 #ifdef PHP_WIN32
 #include <string.h>
 #if HAVE_NSLDAP
-#include <winsock.h>
+#include <winsock2.h>
 #endif
 #define strdup _strdup
 #undef WINDOWS
index 6ecd3a54197641954b3f8cb125e21d44996fe031..3ef97c5683a795226d3fee21d0ab09e3f8ab2466 100644 (file)
@@ -42,7 +42,7 @@
 #include "ext/standard/info.h"
 #include "ext/standard/basic_functions.h"
 #ifdef PHP_WIN32
-#include "winsock.h"
+#include "winsock2.h"
 #endif
 
 static void cal_close_it(zend_rsrc_list_entry *rsrc TSRMLS_DC);
index ef46b204a0171c0dfe16f3524641c50a63f70e7b..6a493ba3a13a19d3c7ddf48ddd3bd7943861b531 100644 (file)
@@ -37,7 +37,7 @@
 #if HAVE_MYSQL
 
 #ifdef PHP_WIN32
-# include <winsock.h>
+# include <winsock2.h>
 # define signal(a, b) NULL
 #elif defined(NETWARE)
 # include <sys/socket.h>
index 5583a4dfcb4498cc48b2400cb0bb6401c12f5552..ba473e8911143c451e2c836b0c94a8712329a03c 100644 (file)
@@ -44,7 +44,7 @@
 #include "php_ini.h"
 
 #ifdef PHP_WIN32
-#include <winsock.h>
+#include <winsock2.h>
 
 #define ODBC_TYPE "Win32"
 #define PHP_ODBC_TYPE ODBC_TYPE
index 1c27c4d774f335515d0acd895cef6e5b6300b32b..04e9a74f084411789966ad330f86e16b733ad0dc 100644 (file)
 
 #define _WIN32_DCOM
 
+#include "php.h"
+#include "php_ini.h"
+
 #include <iostream.h>
 #include <math.h>
 #include <ocidl.h>
 
-#include "php.h"
-#include "php_ini.h"
-
 #include "../rpc.h"
 #include "../php_rpc.h"
 #include "../handler.h"
index 6f95b28772fc90b896afc5e6f5e78bbf0eab69ce..ad767536332d3403df0c6f454e56421a830286f9 100644 (file)
@@ -33,7 +33,7 @@
 
 #include <sys/types.h>
 #ifdef PHP_WIN32
-#include <winsock.h>
+#include <winsock2.h>
 #include <errno.h>
 #include <process.h>
 #include "win32/time.h"
index 32641382fa045ab7568ac344df50c6298682f6c2..916ff4637d2e405c491e56c472deb25215630abf 100644 (file)
@@ -44,7 +44,7 @@
 #include "resolv.h"
 #endif
 #endif /* HAVE_LIBBIND */
-#include <winsock.h>
+#include <winsock2.h>
 #else  /* This holds good for NetWare too, both for Winsock and Berkeley sockets */
 #include <netinet/in.h>
 #if HAVE_ARPA_INET_H
index 25d12573309eb62f9fe43af3806e52c912c567ea..d5024cc3967aeb586c6c489a24041ed7922d191c 100644 (file)
@@ -44,7 +44,7 @@
 #include <fcntl.h>
 #ifdef PHP_WIN32
 #include <windows.h>
-#include <winsock.h>
+#include <winsock2.h>
 #define O_RDONLY _O_RDONLY
 #include "win32/param.h"
 #include "win32/winutil.h"
@@ -821,6 +821,160 @@ static int stream_array_emulate_read_fd_set(zval *stream_array TSRMLS_DC)
 }
 /* }}} */
 
+#ifdef PHP_WIN32
+/* Win32 select() will only work with sockets, so we roll our own implementation that will
+ * get the OS file handle from regular fd's and sockets and then use WaitForMultipleObjects().
+ * This implementation is not as feature-full as posix select, but it works for our purposes
+ */
+static int php_select(int max_fd, fd_set *rfds, fd_set *wfds, fd_set *efds, struct timeval *tv)
+{
+       HANDLE *handles;
+       DWORD ms, waitret;
+       DWORD ms_total;
+       int i, f, s, fd_count = 0, sock_count = 0;
+       int retval;
+       fd_set ard, awr, aex; /* active fd sets */
+       long sock_events;
+
+       for (i = 0; i < max_fd; i++) {
+               if (FD_ISSET(i, rfds) || FD_ISSET(i, wfds) || FD_ISSET(i, efds)) {
+                       if (_get_osfhandle(i) == 0xffffffff) {
+                               /* it is a socket */
+                               sock_count++;
+                       } else {
+                               fd_count++;
+                       }
+               }
+       }
+
+       if (fd_count + sock_count == 0) {
+               return 0;
+       }
+
+       handles = (HANDLE*)emalloc((fd_count + sock_count) * sizeof(HANDLE));
+
+       /* populate the events and handles arrays */
+       f = 0;
+       s = 0;
+       for (i = 0; i < max_fd; i++) {
+               if (FD_ISSET(i, rfds) || FD_ISSET(i, wfds) || FD_ISSET(i, efds)) {
+                       long h = _get_osfhandle(i);
+                       if (h == 0xFFFFFFFF) {
+                               HANDLE evt;
+                               long evt_flags = 0;
+
+                               if (FD_ISSET(i, rfds)) {
+                                       evt_flags |= FD_READ|FD_CONNECT|FD_ACCEPT|FD_CLOSE;
+                               }
+                               if (FD_ISSET(i, wfds)) {
+                                       evt_flags |= FD_WRITE;
+                               }
+                               if (FD_ISSET(i, efds)) {
+                                       evt_flags |= FD_OOB;
+                               }
+
+                               evt = WSACreateEvent();
+                               WSAEventSelect(i, evt, evt_flags); 
+
+                               handles[fd_count + s] = evt;
+                               s++;
+                       } else {
+                               handles[f++] = (HANDLE)h;
+                       }
+               }
+       }
+
+       /* calculate how long we need to wait in milliseconds */
+       if (tv == NULL) {
+               ms_total = INFINITE;
+       } else {
+               ms_total = tv->tv_sec * 1000;
+               ms_total += tv->tv_usec / 1000;
+       }
+
+       waitret = MsgWaitForMultipleObjects(fd_count + sock_count, handles, FALSE, ms_total, QS_ALLEVENTS);
+
+       if (waitret == WAIT_TIMEOUT) {
+               retval = 0;
+       } else if (waitret == 0xFFFFFFFF) {
+               retval = -1;
+       } else {
+
+               FD_ZERO(&ard);
+               FD_ZERO(&awr);
+               FD_ZERO(&aex);
+
+               f = 0;
+               retval = 0;
+               for (i = 0; i < max_fd; i++) {
+                       if (FD_ISSET(i, rfds) || FD_ISSET(i, wfds) || FD_ISSET(i, efds)) {
+                               if (f >= fd_count) {
+                                       /* socket event */
+                                       HANDLE evt = handles[f];
+
+                                       if (WAIT_OBJECT_0 == WaitForSingleObject(evt, 0)) {
+                                               /* check for various signal states */
+                                               if (FD_ISSET(i, rfds)) {
+                                                       WSAEventSelect(i, evt, FD_READ|FD_CONNECT|FD_ACCEPT|FD_CLOSE);
+                                                       if (WAIT_OBJECT_0 == WaitForSingleObject(evt, 0)) {
+                                                               FD_SET(i, &ard);
+                                                       }
+                                               }
+                                               if (FD_ISSET(i, wfds)) {
+                                                       WSAEventSelect(i, evt, FD_WRITE);
+                                                       if (WAIT_OBJECT_0 == WaitForSingleObject(evt, 0)) {
+                                                               FD_SET(i, &awr);
+                                                       }
+                                               }
+                                               if (FD_ISSET(i, efds)) {
+                                                       WSAEventSelect(i, evt, FD_OOB);
+                                                       if (WAIT_OBJECT_0 == WaitForSingleObject(evt, 0)) {
+                                                               FD_SET(i, &aex);
+                                                       }
+                                               }
+                                               retval++;
+                                       }
+
+                                       WSACloseEvent(evt);
+
+                               } else {
+                                       if (WAIT_OBJECT_0 == WaitForSingleObject(handles[f], 0)) {
+                                               if (FD_ISSET(i, rfds)) {
+                                                       FD_SET(i, &ard);
+                                               }
+                                               if (FD_ISSET(i, wfds)) {
+                                                       FD_SET(i, &awr);
+                                               }
+                                               if (FD_ISSET(i, efds)) {
+                                                       FD_SET(i, &aex);
+                                               }
+                                               retval++;
+                                       }
+
+                               }
+                               f++;
+                       }
+               }
+
+               if (rfds) {
+                       *rfds = ard;
+               }
+               if (wfds) {
+                       *wfds = awr;
+               }
+               if (efds) {
+                       *efds = aex;
+               }
+       }
+
+       efree(handles);
+
+       return retval;
+}
+#else
+#define php_select(m, r, w, e, t)      select(m, r, w, e, t)
+#endif
+
 /* {{{ proto int stream_select(array &read_streams, array &write_streams, array &except_streams, int tv_sec[, int tv_usec])
    Runs the select() system call on the sets of streams with a timeout specified by tv_sec and tv_usec */
 PHP_FUNCTION(stream_select)
@@ -867,11 +1021,11 @@ PHP_FUNCTION(stream_select)
                }
        }
        
-       retval = select(max_fd+1, &rfds, &wfds, &efds, tv_p);
+       retval = php_select(max_fd+1, &rfds, &wfds, &efds, tv_p);
 
        if (retval == -1) {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to select [%d]: %s",
-                               errno, strerror(errno));
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to select [%d]: %s (max_fd=%d)",
+                               errno, strerror(errno), max_fd);
                RETURN_FALSE;
        }
 
index d1f37a46dc0fd3163a50a5f8389b453c4b21acdf..bbe6d7debbe4b71e78537835b09c5fc39177144c 100644 (file)
@@ -46,7 +46,7 @@
 #include <sys/socket.h>
 #endif
 #ifdef PHP_WIN32
-#include <winsock.h>
+#include <winsock2.h>
 #elif defined(NETWARE)
 #ifdef NEW_LIBC
 #ifdef USE_WINSOCK
index c68ff5fcf316d36737ced3edbf08a1a84105dc73..a603b464b3309533e0f7fc7fe0311bb0b7bbc981 100644 (file)
@@ -32,7 +32,7 @@
 
 #ifdef PHP_WIN32
 #include <windows.h>
-#include <winsock.h>
+#include <winsock2.h>
 #define O_RDONLY _O_RDONLY
 #include "win32/param.h"
 #elif defined(NETWARE)
@@ -55,7 +55,7 @@
 #endif
 
 #ifdef PHP_WIN32
-#include <winsock.h>
+#include <winsock2.h>
 #elif defined(NETWARE) && defined(USE_WINSOCK)
 /*#include <ws2nlm.h>*/
 #include <novsock2.h>
index 55f9ef26c0dd9253119f6b52f98b305a8a1dd116..d12c61b5f5f6dbc6ac70d5744a6db61c38196a2d 100644 (file)
@@ -36,7 +36,7 @@
 
 #ifdef PHP_WIN32
 #include <windows.h>
-#include <winsock.h>
+#include <winsock2.h>
 #define O_RDONLY _O_RDONLY
 #include "win32/param.h"
 #elif defined(NETWARE)
@@ -59,7 +59,7 @@
 #endif
 
 #ifdef PHP_WIN32
-#include <winsock.h>
+#include <winsock2.h>
 #elif defined(NETWARE) && defined(USE_WINSOCK)
 /*#include <ws2nlm.h>*/
 #include <novsock2.h>
index 0002aaeb377a67b8da1ac711b74394b82526a1bb..755665d636035fef5fa9af6273eff1cf753f1e6e 100644 (file)
@@ -27,7 +27,7 @@
 #include <fcntl.h>
 #ifdef PHP_WIN32
 #include <windows.h>
-#include <winsock.h>
+#include <winsock2.h>
 #define O_RDONLY _O_RDONLY
 #include "win32/param.h"
 #elif defined(NETWARE)
index 3a2c13e2d81c4d5ddf2b49a05728205573f5def8..b04ca107ebf4dc83a3fefaee281d322fb3ec2c65 100644 (file)
@@ -36,7 +36,7 @@
 #include <fcntl.h>
 #ifdef PHP_WIN32
 #include <windows.h>
-#include <winsock.h>
+#include <winsock2.h>
 #define O_RDONLY _O_RDONLY
 #include "win32/param.h"
 #else
index c6781c8ce8c8feb84263c46a33cbc1cc89805774..eb91436b3bcc84be719d04fc55199787f8df2eec 100644 (file)
@@ -33,7 +33,7 @@
 
 #ifdef PHP_WIN32
 #include <windows.h>
-#include <winsock.h>
+#include <winsock2.h>
 #define O_RDONLY _O_RDONLY
 #include "win32/param.h"
 #elif defined(NETWARE)
@@ -74,7 +74,7 @@
 #endif
 
 #ifdef PHP_WIN32
-#include <winsock.h>
+#include <winsock2.h>
 #elif defined(NETWARE) && defined(USE_WINSOCK)
 /*#include <ws2nlm.h>*/
 #include <novsock2.h>
index 7ee4ee00efc38c2318b6fbb71009ef3651228e70..34da44cf2f7f597c9499aa8a56ee30b962689a39 100644 (file)
@@ -61,7 +61,7 @@ static char sccsid[] = "@(#)merge.c   8.2 (Berkeley) 2/14/94";
 #include "php.h"
 
 #ifdef PHP_WIN32
-#include <winsock.h> /* Includes definition for u_char */
+#include <winsock2.h> /* Includes definition for u_char */
 #endif
 
 #if defined(NETWARE) && !defined(NEW_LIBC)
index 51b46b8f18566f1da35521bfa844c34ff2691cfa..50428a8116618cd85ed0508a945f7a414a4ac228 100644 (file)
@@ -26,7 +26,7 @@
 
 #ifdef PHP_WIN32
 #include <windows.h>
-#include <winsock.h>
+#include <winsock2.h>
 #define O_RDONLY _O_RDONLY
 #include "win32/param.h"
 #elif defined(NETWARE)
index 6cd191453a4d994d7f1f5b1e8ea857fd5bed9392..d6c220b3e143750859788b284d5f0fc41749f928 100644 (file)
 #ifndef PHP_H
 #define PHP_H
 
+#ifdef PHP_WIN32
+#include <winsock2.h>
+#endif
+
 #ifdef HAVE_DMALLOC
 #include <dmalloc.h>
 #endif
index eff0393eb14c39629477bfbb93587d6855b549be..f24ee66e319689071282763030d2f90199e12c19 100644 (file)
@@ -27,7 +27,7 @@
 
 #ifdef PHP_WIN32
 #include <windows.h>
-#include <winsock.h>
+#include <winsock2.h>
 #define O_RDONLY _O_RDONLY
 #include "win32/param.h"
 #include "win32/winutil.h"
index 67e961540be9a569c2a5da2449b5daa4b3d39821..d746e359968d9275955b3f8d324dfb2ea4bba55f 100755 (executable)
@@ -1332,6 +1332,15 @@ PHPAPI php_stream *_php_stream_fopen_from_fd(int fd, const char *mode STREAMS_DC
                struct stat sb;
                self->is_pipe = (fstat(self->fd, &sb) == 0 && S_ISFIFO(sb.st_mode)) ? 1 : 0;
        }
+#elif defined(PHP_WIN32)
+       {
+               long handle = _get_osfhandle(self->fd);
+               DWORD in_buf_size, out_buf_size;
+
+               if (handle != 0xFFFFFFFF) {
+                       self->is_pipe = GetNamedPipeInfo((HANDLE)handle, NULL, &out_buf_size, &in_buf_size, NULL);
+               }
+       }
 #endif
        
        stream = php_stream_alloc_rel(&php_stream_stdio_ops, self, 0, mode);
@@ -1365,6 +1374,15 @@ PHPAPI php_stream *_php_stream_fopen_from_file(FILE *file, const char *mode STRE
                struct stat sb;
                self->is_pipe = (fstat(self->fd, &sb) == 0 && S_ISFIFO(sb.st_mode)) ? 1 : 0;
        }
+#elif defined(PHP_WIN32)
+       {
+               long handle = _get_osfhandle(self->fd);
+               DWORD in_buf_size, out_buf_size;
+
+               if (handle != 0xFFFFFFFF) {
+                       self->is_pipe = GetNamedPipeInfo((HANDLE)handle, NULL, &out_buf_size, &in_buf_size, NULL);
+               }
+       }
 #endif
        
        stream = php_stream_alloc_rel(&php_stream_stdio_ops, self, 0, mode);
index cb68f326538f50e6b9c196be77edebdab25149cd..f393b5fedd5f00136a103b6bc3dd1036c10c360c 100755 (executable)
@@ -520,26 +520,32 @@ function system_with_timeout($commandline)
 {
        $data = "";
        
-       $proc = proc_open($commandline, array(1 => array('pipe', 'w')), $pipes);
+       $proc = proc_open($commandline, array(
+               0 => array('pipe', 'r'),
+               1 => array('pipe', 'w'),
+               2 => array('pipe', 'w')
+               ), $pipes);
 
        if (!$proc)
                return false;
 
+       fclose($pipes[0]);
+
        while (true) {
                /* hide errors from interrupted syscalls */
                $r = $pipes;
                $w = null;
                $e = null;
-               $n = stream_select($r, $w, $e, 60);
+               $n = @stream_select($r, $w, $e, 60);
 
                if ($n == 0) {
                        /* timed out */
                        $data .= "\n ** ERROR: process timed out **\n";
                        proc_terminate($proc);
                        return $data;
-               } else if ($n) {
-                       $line = fgets($pipes[1]);
-                       if ($line === false) {
+               } else if ($n > 0) {
+                       $line = fread($pipes[1], 8192);
+                       if (strlen($line) == 0) {
                                /* EOF */
                                break;
                        }
index afd2c74bfbbe38fa412c26df2c044eac12a9631b..5cec39f174a7f196dc8cc531d69653a3d865c636 100644 (file)
@@ -55,7 +55,7 @@ BSC32=bscmake.exe
 # ADD BSC32 /nologo\r
 LINK32=link.exe\r
 # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept\r
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib wsock32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ZendTS.lib TSRM.lib resolv.lib libmysql.lib zlib.lib Urlmon.lib /nologo /version:4.0 /dll /debug /machine:I386 /nodefaultlib:"libcmt" /out:"..\Debug_TS\php4ts_debug.dll" /pdbtype:sept /libpath:"..\TSRM\Debug_TS" /libpath:"..\Zend\Debug_TS" /libpath:"..\..\bindlib_w32\Debug" /libpath:"..\ext\mysql\libmysql\Debug_TS" /libpath:"Debug_TS" /libpath:"..\..\zlib\Debug"\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib ws2_32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ZendTS.lib TSRM.lib resolv.lib libmysql.lib zlib.lib Urlmon.lib /nologo /version:4.0 /dll /debug /machine:I386 /nodefaultlib:"libcmt" /out:"..\Debug_TS\php4ts_debug.dll" /pdbtype:sept /libpath:"..\TSRM\Debug_TS" /libpath:"..\Zend\Debug_TS" /libpath:"..\..\bindlib_w32\Debug" /libpath:"..\ext\mysql\libmysql\Debug_TS" /libpath:"Debug_TS" /libpath:"..\..\zlib\Debug"\r
 \r
 !ELSEIF  "$(CFG)" == "php4dllts - Win32 Release_TS"\r
 \r
@@ -81,7 +81,7 @@ BSC32=bscmake.exe
 # ADD BSC32 /nologo\r
 LINK32=link.exe\r
 # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386\r
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib wsock32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ZendTS.lib TSRM.lib resolv.lib libmysql.lib zlib.lib Urlmon.lib /nologo /version:4.0 /dll /machine:I386 /nodefaultlib:"libcmt" /out:"..\Release_TS\php4ts.dll" /libpath:"..\TSRM\Release_TS" /libpath:"..\Zend\Release_TS" /libpath:"..\..\bindlib_w32\Release" /libpath:"..\ext\mysql\libmysql\Release_TS" /libpath:"Release_TS" /libpath:"..\..\zlib\Release"\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib ws2_32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ZendTS.lib TSRM.lib resolv.lib libmysql.lib zlib.lib Urlmon.lib /nologo /version:4.0 /dll /machine:I386 /nodefaultlib:"libcmt" /out:"..\Release_TS\php4ts.dll" /libpath:"..\TSRM\Release_TS" /libpath:"..\Zend\Release_TS" /libpath:"..\..\bindlib_w32\Release" /libpath:"..\ext\mysql\libmysql\Release_TS" /libpath:"Release_TS" /libpath:"..\..\zlib\Release"\r
 \r
 !ELSEIF  "$(CFG)" == "php4dllts - Win32 Release_TS_inline"\r
 \r
@@ -108,7 +108,7 @@ BSC32=bscmake.exe
 # ADD BSC32 /nologo\r
 LINK32=link.exe\r
 # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib wsock32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ZendTS.lib TSRM.lib resolv.lib /nologo /dll /machine:I386 /nodefaultlib:"libc.lib" /nodefaultlib:"libcmt.lib" /out:"Release_TS/php4ts.dll" /libpath:"TSRM\Release_TS" /libpath:"Zend\Release_TS" /libpath:"..\bindlib_w32\Release"\r
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib wsock32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ZendTS.lib TSRM.lib resolv.lib libmysql.lib zlib.lib Urlmon.lib /nologo /version:4.0 /dll /machine:I386 /nodefaultlib:"libcmt" /out:"..\Release_TS_inline\php4ts.dll" /libpath:"..\TSRM\Release_TS_inline" /libpath:"..\Zend\Release_TS_inline" /libpath:"..\..\bindlib_w32\Release" /libpath:"..\ext\mysql\libmysql\Release_TS_inline" /libpath:"Release_TS_Inline" /libpath:"..\..\zlib\Release"\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib ws2_32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ZendTS.lib TSRM.lib resolv.lib libmysql.lib zlib.lib Urlmon.lib /nologo /version:4.0 /dll /machine:I386 /nodefaultlib:"libcmt" /out:"..\Release_TS_inline\php4ts.dll" /libpath:"..\TSRM\Release_TS_inline" /libpath:"..\Zend\Release_TS_inline" /libpath:"..\..\bindlib_w32\Release" /libpath:"..\ext\mysql\libmysql\Release_TS_inline" /libpath:"Release_TS_Inline" /libpath:"..\..\zlib\Release"\r
 \r
 !ELSEIF  "$(CFG)" == "php4dllts - Win32 Release_TSDbg"\r
 \r
@@ -135,7 +135,7 @@ BSC32=bscmake.exe
 # ADD BSC32 /nologo\r
 LINK32=link.exe\r
 # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib wsock32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ZendTS.lib TSRM.lib resolv.lib libmysql.lib /nologo /version:4.0 /dll /machine:I386 /nodefaultlib:"libc.lib" /nodefaultlib:"libcmt.lib" /out:"..\Release_TS\php4ts.dll" /libpath:"..\TSRM\Release_TS" /libpath:"..\Zend\Release_TS" /libpath:"..\..\bindlib_w32\Release" /libpath:"..\ext\mysql\libmysql\Release_TS" /libpath:"Release_TS"\r
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib wsock32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ZendTS.lib TSRM.lib resolv.lib libmysql.lib zlib.lib Urlmon.lib /nologo /version:4.0 /dll /debug /machine:I386 /nodefaultlib:"libcmt" /out:"..\Release_TSDbg\php4ts.dll" /libpath:"..\TSRM\Release_TSDbg" /libpath:"..\Zend\Release_TSDbg" /libpath:"..\..\bindlib_w32\Release" /libpath:"..\ext\mysql\libmysql\Release_TSDbg" /libpath:"Release_TSDbg"\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib ws2_32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ZendTS.lib TSRM.lib resolv.lib libmysql.lib zlib.lib Urlmon.lib /nologo /version:4.0 /dll /debug /machine:I386 /nodefaultlib:"libcmt" /out:"..\Release_TSDbg\php4ts.dll" /libpath:"..\TSRM\Release_TSDbg" /libpath:"..\Zend\Release_TSDbg" /libpath:"..\..\bindlib_w32\Release" /libpath:"..\ext\mysql\libmysql\Release_TSDbg" /libpath:"Release_TSDbg"\r
 \r
 !ENDIF \r
 \r
index 97a1af9a14f30340fae5fbe43b192729956fad45..82f8efab5d077f36133492febfe5906da9d0ed7c 100644 (file)
@@ -23,7 +23,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #ifndef NETWARE
-#include <winsock.h>
+#include <winsock2.h>
 #else  /* NETWARE */
 #include <netware\sendmail_nw.h>
 #endif /* NETWARE */
index f0514ebe5986c7ee625c75a186de15893ea60f56..4d6c8a2bc2fb9f423ec38205f3a69b047bfeccec 100644 (file)
@@ -13,7 +13,7 @@
 #define TIME_H
 
 /* Include stuff ************************************************************ */
-#include <winsock.h>
+#include <winsock2.h>
 #include <time.h>
 #include <php.h>