Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKen Brown <kbrown@cornell.edu>2021-04-07 20:07:53 +0300
committerKen Brown <kbrown@cornell.edu>2021-04-14 17:07:15 +0300
commit1322dfbf981c6871fb139d46f352950781d9a45a (patch)
tree3bc3d47dfadb8cf5f6e445fee566f23be5db7c98
parent70df7f9dad3fc0d2d44655e9ab7dceed1005f6ad (diff)
Cygwin: AF_UNIX: implement saw_shutdown_write
For consistency between the fhandler_socket_unix and fhandler_socket_wsock classes, add a virtual fhandler_socket::saw_shutdown_write and implement it for fhandler_socket_unix. (It was already implemented for fhandler_socket_wsock.) Use saw_shutdown_write and saw_shutdown_read in select.cc and fhandler_socket_unix.cc where appropriate.
-rw-r--r--winsup/cygwin/fhandler.h2
-rw-r--r--winsup/cygwin/fhandler_socket_unix.cc10
-rw-r--r--winsup/cygwin/select.cc7
3 files changed, 10 insertions, 9 deletions
diff --git a/winsup/cygwin/fhandler.h b/winsup/cygwin/fhandler.h
index 721a432c2..2687a27f4 100644
--- a/winsup/cygwin/fhandler.h
+++ b/winsup/cygwin/fhandler.h
@@ -607,6 +607,7 @@ class fhandler_socket: public fhandler_base
virtual conn_state connect_state (conn_state val) = 0;
virtual conn_state connect_state () const = 0;
virtual bool saw_shutdown_read () const = 0;
+ virtual bool saw_shutdown_write () const = 0;
virtual int ioctl (unsigned int cmd, void *);
virtual int fcntl (int cmd, intptr_t);
@@ -1261,6 +1262,7 @@ class fhandler_socket_unix : public fhandler_socket
int saw_shutdown (int shut) { return shmem->shutdown (shut); }
int saw_shutdown () const { return shmem->shutdown (); }
bool saw_shutdown_read () const { return !!(saw_shutdown () & _SHUT_RECV); }
+ bool saw_shutdown_write () const { return !!(saw_shutdown () & _SHUT_SEND); }
int open (int flags, mode_t mode = 0);
int close ();
diff --git a/winsup/cygwin/fhandler_socket_unix.cc b/winsup/cygwin/fhandler_socket_unix.cc
index cdf9fa001..3f8b3ff6d 100644
--- a/winsup/cygwin/fhandler_socket_unix.cc
+++ b/winsup/cygwin/fhandler_socket_unix.cc
@@ -2476,7 +2476,7 @@ fhandler_socket_unix::recvmsg (struct msghdr *msg, int flags)
/* FIXME: This isn't quite right. There may be data in the
pipe that hasn't been read yet. */
grab_admin_pkt ();
- if (saw_shutdown () & _SHUT_RECV || tot == 0)
+ if (saw_shutdown_read () || tot == 0)
{
ret = 0;
__leave;
@@ -2607,7 +2607,7 @@ restart:
{
/* FIXME: Check for error? */
grab_admin_pkt (false);
- if (saw_shutdown () & _SHUT_RECV)
+ if (saw_shutdown_read ())
{
ret = 0;
__leave;
@@ -2732,7 +2732,7 @@ restart1:
{
/* FIXME: Check for error? */
grab_admin_pkt (false);
- if (saw_shutdown () & _SHUT_RECV)
+ if (saw_shutdown_read ())
{
ret = nbytes_read;
__leave;
@@ -2805,7 +2805,7 @@ restart2:
if (packet->admin_pkt)
{
process_admin_pkt (packet);
- if (saw_shutdown () & _SHUT_RECV)
+ if (saw_shutdown_read ())
{
ret = nbytes_read;
__leave;
@@ -3178,7 +3178,7 @@ fhandler_socket_unix::sendmsg (const struct msghdr *msg, int flags)
__leave;
}
grab_admin_pkt ();
- if (saw_shutdown () & _SHUT_SEND)
+ if (saw_shutdown_write ())
{
set_errno (EPIPE);
/* FIXME: Linux calls for SIGPIPE here, but Posix
diff --git a/winsup/cygwin/select.cc b/winsup/cygwin/select.cc
index 14cf2149d..014be8dcc 100644
--- a/winsup/cygwin/select.cc
+++ b/winsup/cygwin/select.cc
@@ -1981,7 +1981,7 @@ peek_socket_unix (select_record *me, bool)
{
/* FIXME: Check for error? */
fh->grab_admin_pkt (false);
- if (fh->saw_shutdown () & _SHUT_RECV)
+ if (fh->saw_shutdown_read ())
{
select_printf ("read: saw shutdown");
gotone += me->read_ready = true;
@@ -2175,7 +2175,7 @@ fhandler_socket_unix::select_read (select_stuff *ss)
s->cleanup = socket_unix_cleanup;
s->read_selected = true;
grab_admin_pkt ();
- s->read_ready = (saw_shutdown () & _SHUT_RECV);
+ s->read_ready = saw_shutdown_read ());
return s;
}
@@ -2191,8 +2191,7 @@ fhandler_socket_unix::select_write (select_stuff *ss)
s->verify = verify_ok;
s->cleanup = socket_unix_cleanup;
s->write_selected = true;
- s->write_ready = (saw_shutdown () & _SHUT_SEND)
- || connect_state () == unconnected;
+ s->write_ready = saw_shutdown_write () || connect_state () == unconnected;
if (connect_state () != unconnected)
{
s->except_ready = saw_shutdown ();