Bug #8722 Updated: non blocking sockets reading doesn't work on WIN32
| From: | jmoore@php.net | Date: | Mon, 16 Apr 2001 10:38:01 +0000 |
| Subject: | Bug #8722 Updated: non blocking sockets reading doesn't work on WIN32 | ||
| Groups: | php.dev | ||
| Request: | Send a blank email to php-dev+get-51673@lists.php.net to get a copy of this message | ||
ID: 8722
Updated by: jmoore
Reported By: christophe@winamp.com
Old-Status: Open
Status: Assigned
Bug Type: Sockets related
PHP Version: 4.0.4pl1
Assigned To: jmoore
Comments:
Ill test the patch and commit if it works well. It looks right to me.
-James
Previous Comments:
---------------------------------------------------------------------------
[2001-01-15 14:50:07] christophe@winamp.com
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
---------------------------------------------------------------------------
ATTENTION! Do NOT reply to this email!
To reply, use the web interface found at http://bugs.php.net/?id=8722&edit=2