#32979 [Com]: socket stream opened with stream_socket_client doesnt work with stream_select

From: Date: Sat, 29 Mar 2008 10:01:49 +0000
Subject: #32979 [Com]: socket stream opened with stream_socket_client doesnt work with stream_select
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-123755@lists.php.net to get a copy of this message
 ID:               32979
 Comment by:       stotty at tvnet dot hu
 Reported By:      mjpph at stardust dot fi
 Status:           Assigned
 Bug Type:         Streams related
 Operating System: Linux (Fedora Core 3)
 PHP Version:      5CVS-2006-01-18 (dev)
 Assigned To:      wez
 New Comment:

Joe Orton has analyzed the bug and found the root cause, see here:

http://marc.info/?l=php-internals&m=120522857529781&w=2


Previous Comments:
------------------------------------------------------------------------

[2007-10-08 06:03:08] roberto at spadim dot com dot br

without openssl everythink work ok now, socket and stream
where could i send .php files to develop team check it?

------------------------------------------------------------------------

[2007-10-08 05:37:14] roberto at spadim dot com dot br

the problem occur with php 5.2.4

------------------------------------------------------------------------

[2007-10-08 05:32:50] roberto at spadim dot com dot br

i'm having the same problem with xeon quad core (prolian HP) on linux
socket_select work ok
but stream_select don't work
i will recompile php without openssl and check what happen

------------------------------------------------------------------------

[2006-08-25 19:19:54] stotty at tvnet dot hu

Bug is still present in 5.1.4

------------------------------------------------------------------------

[2006-01-31 23:08:00] stotty at tvnet dot hu

I have compared the original socket operations code, and the one in the
xp_ssl.x file, and it seems that even in the non-ssl path the code is
not identical. 

I have fixed four differences, two of which caused some functions to be
called twice, and two of which are casting to *(int*)

I do not claim to know the real cause for the bug, and how these
changes fix the problem, but they do, and they make the code more
consistent, and faster, so I think they should be committed.

Here is the patch that solves this problem form me (against 5.1.2)

------------------------cut here-----------------------
*** php-5.1.2/ext/openssl/xp_ssl.c	2006-01-01 13:50:10.000000000 +0100
--- php-5.1.2ssl/ext/openssl/xp_ssl.c	2006-01-31 23:00:58.000000000
+0100
***************
*** 188,194 ****
  		} while(retry);
  		
  	} else {
! 		didwrite = php_stream_socket_ops.write(stream, buf, count
TSRMLS_CC);
  	}
  	
  	if (didwrite > 0) {
--- 188,195 ----
  		} while(retry);
  		
  	} else {
! 		didwrite = php_stream_socket_ops.write(stream, buf, count
TSRMLS_CC);	
! 		return didwrite;
  	}
  	
  	if (didwrite > 0) {
***************
*** 226,231 ****
--- 227,233 ----
  	else
  	{
  		nr_bytes = php_stream_socket_ops.read(stream, buf, count
TSRMLS_CC);
+ 		return nr_bytes;
  	}
  
  	if (nr_bytes > 0) {
***************
*** 636,642 ****
  
  		case PHP_STREAM_AS_FD_FOR_SELECT:
  			if (ret) {
! 				*ret = (void*)sslsock->s.socket;
  			}
  			return SUCCESS;
  
--- 638,644 ----
  
  		case PHP_STREAM_AS_FD_FOR_SELECT:
  			if (ret) {
! 				*(int*)ret = (void*)sslsock->s.socket;
  			}
  			return SUCCESS;
  
***************
*** 646,652 ****
  				return FAILURE;
  			}
  			if (ret) {
! 				*ret = (void*)sslsock->s.socket;
  			}
  			return SUCCESS;
  		default:
--- 648,654 ----
  				return FAILURE;
  			}
  			if (ret) {
! 				*(int*)ret = (void*)sslsock->s.socket;
  			}
  			return SUCCESS;
  		default:

------------------------cut here-----------------------

------------------------------------------------------------------------

The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
    http://bugs.php.net/32979

-- 
Edit this bug report at http://bugs.php.net/?id=32979&edit=1



Thread (50 messages)

« previous php.bugs (#123755) next »