cvs: php4 /main network.c
| From: | Wez Furlong | Date: | Mon, 15 Apr 2002 20:11:15 +0000 |
| Subject: | cvs: php4 /main network.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-11148@lists.php.net to get a copy of this message | ||
wez Mon Apr 15 16:11:15 2002 EDT
Modified files:
/php4/main network.c
Log:
Some minor tweaks and debugging for sockets.
Index: php4/main/network.c
diff -u php4/main/network.c:1.45 php4/main/network.c:1.46
--- php4/main/network.c:1.45 Wed Apr 10 18:42:28 2002
+++ php4/main/network.c Mon Apr 15 16:11:12 2002
@@ -15,7 +15,7 @@
| Author: Stig Venaas <venaas@uninett.no> |
+----------------------------------------------------------------------+
*/
-/* $Id: network.c,v 1.45 2002/04/10 22:42:28 wez Exp $ */
+/* $Id: network.c,v 1.46 2002/04/15 20:11:12 wez Exp $ */
#define MAX_CHUNKS_PER_READ 10
@@ -587,6 +587,17 @@
return didwrite;
}
+
+#if ZEND_DEBUG && DEBUG_MAIN_NETWORK
+static inline void dump_sock_state(char *msg, php_netstream_data_t *sock TSRMLS_DC)
+{
+ printf("%s: blocked=%d timeout_event=%d eof=%d inbuf=%d\n", msg, sock->is_blocked,
sock->timeout_event, sock->eof, TOREAD(sock));
+}
+# define DUMP_SOCK_STATE(msg, sock) dump_sock_state(msg, sock TSRMLS_CC)
+#else
+# define DUMP_SOCK_STATE(msg, sock) /* nothing */
+#endif
+
static void php_sock_stream_wait_for_data(php_stream *stream, php_netstream_data_t *sock TSRMLS_DC)
{
fd_set fdr, tfdr;
@@ -602,10 +613,13 @@
else
ptimeout = &timeout;
+
while(1) {
tfdr = fdr;
timeout = sock->timeout;
+DUMP_SOCK_STATE("wait_for_data", sock);
+
retval = select(sock->socket + 1, &tfdr, NULL, NULL, ptimeout);
if (retval == 0)
@@ -614,14 +628,17 @@
if (retval >= 0)
break;
}
+DUMP_SOCK_STATE("wait_for_data: done", sock);
}
+
static size_t php_sock_stream_read_internal(php_stream *stream, php_netstream_data_t *sock
TSRMLS_DC)
{
char buf[PHP_SOCK_CHUNK_SIZE];
int nr_bytes;
size_t nr_read = 0;
-
+ php_sockaddr_storage sa;
+
/* For blocking sockets, we wait until there is some
data to read (real data or EOF)
@@ -629,6 +646,7 @@
therefore sock->eof would be set errornously.
*/
+DUMP_SOCK_STATE("read_internal entry", sock);
if(sock->is_blocked) {
php_sock_stream_wait_for_data(stream, sock TSRMLS_CC);
@@ -636,6 +654,8 @@
return 0;
}
+DUMP_SOCK_STATE("read_internal about to recv/SSL_read", sock);
+
/* read at a maximum sock->chunk_size */
#if HAVE_OPENSSL_EXT
if (sock->ssl_active)
@@ -643,11 +663,13 @@
else
#endif
nr_bytes = recv(sock->socket, buf, sock->chunk_size, 0);
+DUMP_SOCK_STATE("read_internal after recv/SSL_read", sock);
+
if(nr_bytes > 0) {
php_stream_notify_progress_increment(stream->context, nr_bytes, 0);
- /* try to avoid ever expanding buffer */
+ /* try to avoid an ever-expanding buffer */
if (sock->readpos > 0) {
memmove(sock->readbuf, READPTR(sock), sock->readbuflen - sock->readpos);
sock->writepos -= sock->readpos;
@@ -677,6 +699,7 @@
int i;
for(i = 0; !sock->eof && i < MAX_CHUNKS_PER_READ; i++) {
+DUMP_SOCK_STATE("read about to read_internal", sock);
nr_bytes = php_sock_stream_read_internal(stream, sock TSRMLS_CC);
if(nr_bytes == 0)
break;
@@ -695,6 +718,7 @@
if (buf == NULL && count == 0) {
/* check for EOF condition */
+DUMP_SOCK_STATE("check for EOF", sock);
if (sock->eof)
return EOF;
@@ -731,7 +755,8 @@
if (sock->is_blocked) {
sock->timeout_event = 0;
while(!sock->eof && TOREAD(sock) < count && !sock->timeout_event)
- php_sock_stream_read_internal(stream, sock TSRMLS_CC);
+ if (php_sock_stream_read_internal(stream, sock TSRMLS_CC) == 0)
+ break;
} else {
php_sock_stream_read(stream, sock TSRMLS_CC);
}
@@ -757,6 +782,8 @@
if (sock->ssl_active) {
SSL_shutdown(sock->ssl_handle);
sock->ssl_active = 0;
+ }
+ if (sock->ssl_handle) {
SSL_free(sock->ssl_handle);
sock->ssl_handle = NULL;
}