summaryrefslogtreecommitdiff
path: root/main/network.c
diff options
context:
space:
mode:
authorWez Furlong <wez@php.net>2002-08-19 22:59:10 +0000
committerWez Furlong <wez@php.net>2002-08-19 22:59:10 +0000
commit5f9a5a7c8e763d895f3f3dbb7cacbab94f5bc68a (patch)
treea855cffe9ff94297cc2ad1308af672c29aa792e5 /main/network.c
parent6dbc0e5483d4c1c4008a390cb613d9118dd73e71 (diff)
downloadphp-git-5f9a5a7c8e763d895f3f3dbb7cacbab94f5bc68a.tar.gz
Remove php_stream_sock_set_blocking and replace with
php_stream_set_option which can be used in a similar way as ioctl() to set options for streams. Current options include buffering and blocking support. o Buffer control is support for stdio based streams. o Blocking/non-blocking is supported for stdio and socket based streams.
Diffstat (limited to 'main/network.c')
-rw-r--r--main/network.c56
1 files changed, 31 insertions, 25 deletions
diff --git a/main/network.c b/main/network.c
index 3fe7e9a152..769fe2a8c4 100644
--- a/main/network.c
+++ b/main/network.c
@@ -13,6 +13,7 @@
| license@php.net so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Author: Stig Venaas <venaas@uninett.no> |
+ | Streams work by Wez Furlong <wez@thebrainroom.com> |
+----------------------------------------------------------------------+
*/
/* $Id$ */
@@ -668,28 +669,6 @@ PHPAPI int php_set_sock_blocking(int socketd, int block TSRMLS_DC)
return ret;
}
-PHPAPI int php_stream_sock_set_blocking(php_stream *stream, int mode TSRMLS_DC)
-{
- int oldmode;
- php_netstream_data_t *sock = (php_netstream_data_t*)stream->abstract;
-
- if (!php_stream_is(stream, PHP_STREAM_IS_SOCKET))
- return 0;
-
- oldmode = sock->is_blocked;
-
- /* no need to change anything */
- if (mode == oldmode)
- return oldmode;
-
- if (SUCCESS == php_set_sock_blocking(sock->socket, mode TSRMLS_CC)) {
- sock->is_blocked = mode;
- return oldmode;
- }
-
- return -1;
-}
-
PHPAPI size_t php_stream_sock_set_chunk_size(php_stream *stream, size_t size TSRMLS_DC)
{
size_t oldsize;
@@ -887,9 +866,9 @@ DUMP_SOCK_STATE("check for EOF", sock);
* socket is still active, try to read a chunk of data,
* but lets not block. */
sock->timeout_event = 0;
- save_blocked = php_stream_sock_set_blocking(stream, 1 TSRMLS_CC);
+ save_blocked = php_stream_set_option(stream, PHP_STREAM_OPTION_BLOCKING, 0, NULL);
php_sock_stream_read_internal(stream, sock TSRMLS_CC);
- php_stream_sock_set_blocking(stream, save_blocked TSRMLS_CC);
+ php_stream_set_option(stream, PHP_STREAM_OPTION_BLOCKING, save_blocked, NULL);
if (sock->eof)
return EOF;
@@ -961,6 +940,32 @@ static int php_sockop_stat(php_stream *stream, php_stream_statbuf *ssb TSRMLS_DC
return fstat(sock->socket, &ssb->sb);
}
+static int php_sockop_set_option(php_stream *stream, int option, int value, void *ptrparam TSRMLS_DC)
+{
+ int oldmode;
+ php_netstream_data_t *sock = (php_netstream_data_t*)stream->abstract;
+
+ switch(option) {
+ case PHP_STREAM_OPTION_BLOCKING:
+
+ oldmode = sock->is_blocked;
+
+ /* no need to change anything */
+ if (value == oldmode)
+ return oldmode;
+
+ if (SUCCESS == php_set_sock_blocking(sock->socket, value TSRMLS_CC)) {
+ sock->is_blocked = value;
+ return oldmode;
+ }
+
+ return -1;
+
+ default:
+ return -1;
+ }
+}
+
static int php_sockop_cast(php_stream *stream, int castas, void **ret TSRMLS_DC)
{
php_netstream_data_t *sock = (php_netstream_data_t*)stream->abstract;
@@ -1065,7 +1070,8 @@ php_stream_ops php_stream_socket_ops = {
"socket",
NULL, php_sockop_gets,
php_sockop_cast,
- php_sockop_stat
+ php_sockop_stat,
+ php_sockop_set_option
};