ID: 20023 Updated by: [EMAIL PROTECTED] Reported By: [EMAIL PROTECTED] -Status: Open +Status: Feedback Bug Type: Sockets related Operating System: Win 98 SP2 PHP Version: 4.2.2 4.3 New Comment:
Please try using this CVS snapshot: http://snaps.php.net/php4-latest.tar.gz For Windows: http://snaps.php.net/win32/php4-win32-latest.zip Previous Comments: ------------------------------------------------------------------------ [2002-10-25 13:09:03] [EMAIL PROTECTED] I didn't update - I did a new parallel inst of 4.3 obviously leading to some inst issues. These are covered in another bug thread because they seem to be due to the environmental diffences between CGI and module mode. One thing is certain: 4.3 behaves different from 4.2.2 using the same inst strategy - I will try to sort it out. Sven ------------------------------------------------------------------------ [2002-10-24 01:55:00] [EMAIL PROTECTED] you most likely didn't update PHP correctly. Just make sure you first REMOVE all existing PHP related binaries (dlls, etc.) and then install the new version. ------------------------------------------------------------------------ [2002-10-23 09:47:58] [EMAIL PROTECTED] I did as you suggested. But now it isn't working at all anymore: as with 4.2.2 I can do everything up to (but not including) entering a character into the telnet client. doing socket_read or even an echo(socket_strerror(socket_last_error($client[$i]))); upon recieving that character triggers a Page Fault in php4ts. ------------------------------------------------------------------------ [2002-10-22 10:19:05] [EMAIL PROTECTED] Please try using this CVS snapshot: http://snaps.php.net/php4-latest.tar.gz For Windows: http://snaps.php.net/win32/php4-win32-latest.zip ------------------------------------------------------------------------ [2002-10-22 05:27:22] [EMAIL PROTECTED] I use this with PHP 4.2.2 Win executable version: <?php // set up listener and wait for clients $listener = socket_create(AF_INET, SOCK_STREAM, 0); socket_setopt($listener, SOL_SOCKET, SO_REUSEADDR, 1); socket_bind($listener, "0.0.0.0", 1234); if (socket_listen($listener, 5); $client = array(); // monitoring loop while (true) { $read[0] = $listener; // keep track of clients for ($i = 0; $i < MAX_CLIENTS; i++) { if ($client[$i] != null) $read[$i + 1] = $client[$i]; } // watch for any socket activity $nready = socket_select($read, $null, $null, null); if (in_array($listener, $read)) { // here we have a new client for ($i = 0; $i < MAX_CLIENTS; $i++) { if ($client[$i] == null) { $client[$i] = socket_accept($listener); break; } } if (--$nready <= 0) continue; } // get data from socket(s) marked as active for ($i = 0; $i < MAX_CLIENTS; $i++) { if (in_array($client[$i], $read)) { socket_getpeername($client[$i], $host, $port); $n = socket_read($client[$i], 16300); if (strlen($n) > 0) echo "rcv from $host:$port:$n\r\n"; // else close and cleanup socket } } } This is, slightly modified, the example from the manual. Everything works fine as long as I have well-behaved clients. But if I for example try this against a telnet client and just close it without properly disconnecting before my script (by the way running in a dos box with php -f ... ) in turn dies with a page fault when getting to "socket_read". I tried to have a look at "socket_last_error" after "socket_select" but that does not help since it says: 0. "socket_select" lets loose upon the killing of the client, putting the socket into the "$read" array. So I have to look at it... ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=20023&edit=1