summaryrefslogtreecommitdiff
path: root/channels.h
diff options
context:
space:
mode:
authordjm@openbsd.org <djm@openbsd.org>2022-01-06 21:48:38 +0000
committerDamien Miller <djm@mindrot.org>2022-01-07 09:21:38 +1100
commit17877bc81db3846e6e7d4cfb124d966bb9c9296b (patch)
tree445d36b9c123ccde4d6856318beba59456787edb /channels.h
parent5c79952dfe1aa36105c93b3f383ce9be04dee384 (diff)
downloadopenssh-git-17877bc81db3846e6e7d4cfb124d966bb9c9296b.tar.gz
upstream: convert ssh, sshd mainloops from select() to poll();
feedback & ok deraadt@ and markus@ has been in snaps for a few months OpenBSD-Commit-ID: a77e16a667d5b194dcdb3b76308b8bba7fa7239c
Diffstat (limited to 'channels.h')
-rw-r--r--channels.h18
1 files changed, 11 insertions, 7 deletions
diff --git a/channels.h b/channels.h
index 88898f89..420099ee 100644
--- a/channels.h
+++ b/channels.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: channels.h,v 1.139 2022/01/06 21:46:23 djm Exp $ */
+/* $OpenBSD: channels.h,v 1.140 2022/01/06 21:48:38 djm Exp $ */
/*
* Author: Tatu Ylonen <ylo@cs.hut.fi>
@@ -138,6 +138,7 @@ struct Channel {
int sock; /* sock fd */
u_int io_want; /* bitmask of SSH_CHAN_IO_* */
u_int io_ready; /* bitmask of SSH_CHAN_IO_* */
+ int pollfd_offset; /* base offset into pollfd array (or -1) */
int ctl_chan; /* control channel (multiplexed connections) */
int isatty; /* rfd is a tty */
#ifdef _AIX
@@ -146,10 +147,10 @@ struct Channel {
int client_tty; /* (client) TTY has been requested */
int force_drain; /* force close on iEOF */
time_t notbefore; /* Pause IO until deadline (time_t) */
- int delayed; /* post-select handlers for newly created
+ int delayed; /* post-IO handlers for newly created
* channels are delayed until the first call
- * to a matching pre-select handler.
- * this way post-select handlers are not
+ * to a matching pre-IO handler.
+ * this way post-IO handlers are not
* accidentally called if a FD gets reused */
int restore_block; /* fd mask to restore blocking status */
struct sshbuf *input; /* data read from socket, to be sent over
@@ -238,8 +239,10 @@ struct Channel {
#define SSH_CHAN_IO_WFD 0x02
#define SSH_CHAN_IO_EFD_R 0x04
#define SSH_CHAN_IO_EFD_W 0x08
+#define SSH_CHAN_IO_EFD (SSH_CHAN_IO_EFD_R|SSH_CHAN_IO_EFD_W)
#define SSH_CHAN_IO_SOCK_R 0x10
#define SSH_CHAN_IO_SOCK_W 0x20
+#define SSH_CHAN_IO_SOCK (SSH_CHAN_IO_SOCK_R|SSH_CHAN_IO_SOCK_W)
/* Read buffer size */
#define CHAN_RBUF (16*1024)
@@ -308,10 +311,11 @@ int channel_input_window_adjust(int, u_int32_t, struct ssh *);
int channel_input_status_confirm(int, u_int32_t, struct ssh *);
/* file descriptor handling (read/write) */
+struct pollfd;
-void channel_prepare_select(struct ssh *, fd_set **, fd_set **, int *,
- u_int*, time_t*);
-void channel_after_select(struct ssh *, fd_set *, fd_set *);
+void channel_prepare_poll(struct ssh *, struct pollfd **,
+ u_int *, u_int *, u_int, time_t *);
+void channel_after_poll(struct ssh *, struct pollfd *, u_int);
void channel_output_poll(struct ssh *);
int channel_not_very_much_buffered_data(struct ssh *);