aboutsummaryrefslogtreecommitdiff
path: root/pfinet/io-ops.c
diff options
context:
space:
mode:
Diffstat (limited to 'pfinet/io-ops.c')
-rw-r--r--pfinet/io-ops.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/pfinet/io-ops.c b/pfinet/io-ops.c
index 0236c594..5f3b1e90 100644
--- a/pfinet/io-ops.c
+++ b/pfinet/io-ops.c
@@ -23,6 +23,7 @@
#include <linux/wait.h>
#include <linux/socket.h>
#include <linux/net.h>
+#include <linux/poll.h>
#include <net/sock.h>
#include "io_S.h"
@@ -256,8 +257,9 @@ S_io_select (struct sock_user *user,
mach_msg_type_name_t reply_type,
int *select_type)
{
- const int want = *select_type;
+ const int want = *select_type | POLLERR;
int avail;
+ int ret = 0;
if (!user)
return EOPNOTSUPP;
@@ -293,12 +295,15 @@ S_io_select (struct sock_user *user,
while ((avail & want) == 0);
}
- /* We got something. */
- *select_type = avail;
+ if (avail & POLLERR)
+ ret = EIO;
+ else
+ /* We got something. */
+ *select_type = avail;
pthread_mutex_unlock (&global_lock);
- return 0;
+ return ret;
}
error_t