summaryrefslogtreecommitdiff
path: root/main/streams/xp_socket.c
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@php.net>2006-12-19 08:58:58 +0000
committerDmitry Stogov <dmitry@php.net>2006-12-19 08:58:58 +0000
commit03312cc0d9594b1c70cb563a8e3450be5cc6f505 (patch)
tree956fe2b206234fc346716ea236ec6e216072e3e5 /main/streams/xp_socket.c
parent8a3a61bcd047c4da7b3355129e33646ae01f917c (diff)
downloadphp-git-03312cc0d9594b1c70cb563a8e3450be5cc6f505.tar.gz
Added function stream_socket_shutdown(). It is a wraper for system shutdown() function, that shut downs part of a full-duplex connection
Diffstat (limited to 'main/streams/xp_socket.c')
-rw-r--r--main/streams/xp_socket.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/main/streams/xp_socket.c b/main/streams/xp_socket.c
index af2a060cff..6528a95b64 100644
--- a/main/streams/xp_socket.c
+++ b/main/streams/xp_socket.c
@@ -369,6 +369,24 @@ static int php_sockop_set_option(php_stream *stream, int option, int value, void
return PHP_STREAM_OPTION_RETURN_OK;
+#ifdef HAVE_SHUTDOWN
+# ifndef SHUT_RD
+# define SHUT_RD 0
+# endif
+# ifndef SHUT_WR
+# define SHUT_WR 1
+# endif
+# ifndef SHUT_RDWR
+# define SHUT_RDWR 2
+# endif
+ case STREAM_XPORT_OP_SHUTDOWN: {
+ static const int shutdown_how[] = {SHUT_RD, SHUT_WR, SHUT_RDWR};
+
+ xparam->outputs.returncode = shutdown(sock->socket, shutdown_how[xparam->how]);
+ return PHP_STREAM_OPTION_RETURN_OK;
+ }
+#endif
+
default:
return PHP_STREAM_OPTION_RETURN_NOTIMPL;
}