ID: 21197 Comment by: thessoro at gmail dot com Reported By: bool at boolsite dot net Status: Assigned Bug Type: Sockets related Operating System: * PHP Version: 5.*, 4.* (2005-11-17) (cvs) Assigned To: iliaa New Comment:
I think the existence of this bug should be mentioned in the documentation to prevent developers rely on PHP_NORMAL_READ. Although OS category is set to * i can only reproduce it in windows. I checked my script there too late. So, as a script relying this feature is capable of making the entire socket extension useless on Windows, i think is important enough to mention it en the socket_read section of the manual. Thx, Previous Comments: ------------------------------------------------------------------------ [2005-12-06 00:09:55] [EMAIL PROTECTED] Ilia, check this out please. ------------------------------------------------------------------------ [2005-11-05 22:10:22] [EMAIL PROTECTED] I've made a patch that implements the idea of my last comment. The test case now works properly. I haven't tested bug #35062 but it seems to be a different bug. http://mega.ist.utl.pt/~ncpl/php_sockets_win.txt ------------------------------------------------------------------------ [2005-11-05 01:36:39] [EMAIL PROTECTED] I was walking through the MSDN docs and I didn't also find anything. But the best way (IMHO) is to store in the php_socket struct if the socket is blocking or not (and update that field in the socket_set_(non)block() functions). It also saves the fcntl syscall on nix systems. ------------------------------------------------------------------------ [2005-11-04 19:30:44] [EMAIL PROTECTED] Here's a possible patch, but Wez probably knows better if there's a way to tell if a windows socket is in blocking mode... Index: sockets.c =================================================================== RCS file: /repository/php-src/ext/sockets/sockets.c,v retrieving revision 1.171.2.2 diff -u -p -d -r1.171.2.2 sockets.c --- sockets.c 3 Nov 2005 15:00:51 -0000 1.171.2.2 +++ sockets.c 4 Nov 2005 18:28:45 -0000 @@ -257,6 +257,12 @@ static int php_read(int bsd_socket, void int nonblock = 0; char *t = (char *) buf; +/* + * fcntl(s, F_GETFL) will always fail for windows, and there's no way to + * determine if a socket is in blocking mode to my current knowledge, so we + * just omit this check; though that means we're always blocking on win32... + */ +#ifndef PHP_WIN32 m = fcntl(bsd_socket, F_GETFL); if (m < 0) { return m; @@ -264,6 +270,7 @@ static int php_read(int bsd_socket, void nonblock = (m & O_NONBLOCK); m = 0; +#endif set_errno(0); ------------------------------------------------------------------------ [2005-11-04 16:24:47] [EMAIL PROTECTED] See also bug #35062 ------------------------------------------------------------------------ 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/21197 -- Edit this bug report at http://bugs.php.net/?id=21197&edit=1