|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
[2005-03-31 16:13 UTC] php-bugs at lists dot php dot net
|
|||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Fri Dec 19 10:00:01 2025 UTC |
Persistent socket connections cannot be re-used. The first invocation of pfsockopen() works fine. But if I click on Reload button (several times if more than one Apache process is running), the socket returned by the function (got from a hash) cannot be used. PHP 3.0.16 just dies without writing anything to the output (Netscape: "The document contained no data", telnet localhost 80: "Connection closed by foreign host" - without any output). Apache log: ... [Wed Dec 6 09:20:11 2000] [notice] Apache/1.3.12 (Unix) (SuSE/Linux) mod_fastcgi/2.2.2 balanced_by_mod_backhand/1.0.8 DAV/1.0.0 mod_perl/1.24 PHP/3.0.16 configured -- resuming normal operations ... [Wed Dec 6 09:57:47 2000] [notice] child pid 24437 exit signal Segmentation fault (11) ... Note: PHP 4.0.0 reports EOF on socket (function feof( $socket ) returns TRUE). But "Segmentation faults" are being reported in the log file of Apache, too. Note: there are several bug reports for similar problems: #6914, #7420, #7723. #simple test script (/usr/local/httpd/htdocs/jacek/pfsockopen.php3): <HTML> <HEAD> <TITLE> test: pfsockopen </TITLE> </HEAD> <BODY> <? // port = 7 is echo, works fine if using fsockopen() - not persistent $socket = pfsockopen( "localhost", 7, $errno, $errstr, 10 ); if( ! $socket ) { printf( "cannot connect: %d, %s\n<BR>\n", $errno, $errstr ); } else { printf( "socket: %s\n<BR>\n", $socket ); if( feof( $socket ) ) { printf( "EOF on socket\n<BR>\n" ); exit; } printf( "<TABLE BORDER=1>\n<TR>\n" ); printf( "\t<TD>Written</TD>\n\t<TD>Received</TD>\n</TR>\n" ); for( $i = 0; $i < 10; $i ++ ) { $send = "i = $i\n"; fputs( $socket, $send ); printf( "<TR>\n\t<TD ALIGN=center>%s</TD>\n", chop( $send ) ); $rcvd = fgets( $socket, 80 ); printf( "\t<TD ALIGN=center>%s</TD>\n</TR>\n", chop( $rcvd ) ); } printf( "</TABLE>\n" ); } ?> </BODY> </HTML> Configure command (standard SuSE 7.0): ./configure '--with-adabas=/usr/lib/adabas' '--with-pgsql=/usr' '--with-mysql=yes' '--enable-safe-mode' '--enable-sysvsem' '--enable-sysvshm' '--enable-track-vars' '--enable-magic-quotes' '--enable-memory-limit' '--enable-debugger' '--enable-bcmath' '--with-zlib=yes' '--with-ttf' '--with-imap=yes' '--with-ldap=yes' '--with-pdflib' '--with-xml' '--with-gd=yes' '--with-yp' '--with-jpeg-dir' '--with-tiff-dir' '--with-config-file-path=/etc/httpd' '--with-apxs=/usr/sbin/apxs -ltiff -lnsl -lpdf -lpng' '--with-exec-dir=/usr/lib/apache/bin' '--with-apache=/usr/src/packages/BUILD/php-3.0.16/..' 'i386-suse-linux-gnu' php3.ini file path is set to: /etc/httpd Apache version (standard SuSE 7.0): Server version: Apache/1.3.12 (Unix) (SuSE/Linux) Server built: Jul 30 2000 22:47:29 PHP used as module. output from strace -p <PID of an Apache process>: read(5, "GET /jacek/pfsockopen.php3\r\n", 4096) = 28 rt_sigaction(SIGUSR1, {SIG_IGN}, {SIG_IGN}, 8) = 0 time(NULL) = 976096455 stat("/usr/local/httpd/htdocs/jacek/pfsockopen.php3", {st_mode=S_IFREG|0644, st_size=748, ...}) = 0 lstat("/usr", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 lstat("/usr/local", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 lstat("/usr/local/httpd", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 lstat("/usr/local/httpd/htdocs", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 lstat("/usr/local/httpd/htdocs/jacek", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 lstat("/usr/local/httpd/htdocs/jacek/pfsockopen.php3", {st_mode=S_IFREG|0644, st_size=748, ...}) = 0 gettimeofday({976096455, 747885}, NULL) = 0 stat("/usr/local/httpd/htdocs/jacek/pfsockopen.php3", {st_mode=S_IFREG|0644, st_size=748, ...}) = 0 lstat("/usr", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 lstat("/usr/local", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 lstat("/usr/local/httpd", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 lstat("/usr/local/httpd/htdocs", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 lstat("/usr/local/httpd/htdocs/jacek", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 lstat("/usr/local/httpd/htdocs/jacek/pfsockopen.php3", {st_mode=S_IFREG|0644, st_size=748, ...}) = 0 open("/usr/local/httpd/htdocs/jacek/pfsockopen.php3", O_RDONLY) = 7 fcntl(7, F_DUPFD, 15) = 19 close(7) = 0 umask(077) = 022 umask(022) = 077 chdir("/usr/local/httpd/htdocs/jacek") = 0 setitimer(ITIMER_PROF, {it_interval={0, 0}, it_value={10, 0}}, NULL) = 0 rt_sigaction(SIGPROF, {0x402ebcb0, [], SA_INTERRUPT|0x4000000}, {0x402ebcb0, [], SA_INTERRUPT|0x4000000}, 8) = 0 old_mmap(NULL, 200704, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40887000 fcntl(19, F_GETFL) = 0 (flags O_RDONLY) fstat64(19, {st_mode=S_IFREG|0644, st_size=748, ...}) = 0 old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40015000 _llseek(19, 0, [0], SEEK_CUR) = 0 ioctl(19, TCGETS, 0xbffff898) = -1 ENOTTY (Inappropriate ioctl for device) ioctl(19, TCGETS, 0xbffff818) = -1 ENOTTY (Inappropriate ioctl for device) read(19, "<HTML>\n<HEAD> <TITLE> test: pfso"..., 8192) = 748 read(19, "", 4096) = 0 send(2433068, "i = 0\n", 6, 0) = -1 EBADF (Bad file descriptor) --- SIGSEGV (Segmentation fault) --- chdir("/usr/local/httpd") = 0 rt_sigaction(SIGSEGV, {SIG_DFL}, {SIG_DFL}, 8) = 0 getpid() = 8944 kill(8944, SIGSEGV) = 0 sigreturn() = ? (mask now []) --- SIGSEGV (Segmentation fault) ---