RE: [PHP-DEV] Patch that corrects non blocked socket reading on W IN32

From: Date: Tue, 16 Jan 2001 17:43:46 +0000
Subject: RE: [PHP-DEV] Patch that corrects non blocked socket reading on W IN32
Groups: php.dev 
Request: Send a blank email to php-dev+get-44247@lists.php.net to get a copy of this message
Actually, it's not that dangerous as the redefinition of errno only occurs in fsock.c and errno is only used in fsock.c for retrieving socket errors... -c -----Original Message----- From: Andi Gutmans [mailto:andi@zend.com] Sent: mardi 16 janvier 2001 09:48 To: Christophe Thibault; php-dev@lists.php.net Subject: Re: [PHP-DEV] Patch that corrects non blocked socket reading on WIN32 I think the code itself should be fixed (with #ifdef or add it to the socket abstraction). It's dangerous to redefine errno because other code uses it too. Andi At 01:01 PM 1/14/2001 -0800, Christophe Thibault wrote: >I just came across a bug still present in the latest php 4 release. i have >the following script: > > $g_ssock=fsockopen($server,$port,$errno,$errstr,30); > socket_set_blocking($g_ssock,0); > while(!feof($g_ssock)) > echo fgets($g_ssock,4096); > >if you uncomment the socket_set_blocking line it will work fine on win32, >but with non blocking sockets, feof will always return true. by digging >through the code, it appears that fsock.c uses the errno() function for >determining any socket error as seen in function php_sockread_internal: > > } else if(nr_bytes == 0 || (nr_bytes < 0 && errno != EWOULDBLOCK)) { > sock->eof = 1; > } > >the problem is that win32 doesn't report socket errors with _errno() but >with WSAGetLastError() so here is my fix: > >in fsock.c, line 46, replace: > >#ifdef PHP_WIN32 >#include <winsock.h> >#else > >with: > >#ifdef PHP_WIN32 >#include <winsock.h> >#undef errno >#define errno (WSAGetLastError()) >#else > >and now it works like a charm :) please submit my patch to the cvs server so >i can benefit of it in the next php releases > >bye, >-christophe > >-- >PHP Development Mailing List <http://www.php.net/> >To unsubscribe, e-mail: php-dev-unsubscribe@lists.php.net >For additional commands, e-mail: php-dev-help@lists.php.net >To contact the list administrators, e-mail: php-list-admin@lists.php.net

« previous php.dev (#44247) next »