aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormcpcpc <michaelczigler@icloud.com>2020-09-21 18:24:03 -0400
committermcpcpc <michaelczigler@icloud.com>2020-09-21 18:24:03 -0400
commit7eec954a21cb185b1f8561f55ddd1ec8f2f88bc1 (patch)
treed51855c2afe59cab326dd33455c2b54c9007547b
parentget F_SETFL before setting nonblocking (diff)
downloadkirc-7eec954a21cb185b1f8561f55ddd1ec8f2f88bc1.tar.gz
kirc-7eec954a21cb185b1f8561f55ddd1ec8f2f88bc1.tar.bz2
kirc-7eec954a21cb185b1f8561f55ddd1ec8f2f88bc1.tar.xz
kirc-7eec954a21cb185b1f8561f55ddd1ec8f2f88bc1.tar.zst
kirc-7eec954a21cb185b1f8561f55ddd1ec8f2f88bc1.zip
add keyboardhit() function
-rw-r--r--kirc.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/kirc.c b/kirc.c
index 32ea05f..d6bba09 100644
--- a/kirc.c
+++ b/kirc.c
@@ -10,7 +10,9 @@
#include <fcntl.h>
#include <poll.h>
#include <errno.h>
+#include <termios.h>
#include <sys/socket.h>
+#include <sys/ioctl.h>
#define MSG_MAX 512 /* guaranteed max message length */
#define CHA_MAX 200 /* guaranteed max channel length */
@@ -258,6 +260,21 @@ handle_user_input(void) {
}
}
+static int
+keyboardhit() {
+ struct termios save, tp;
+ int byteswaiting;
+
+ tcgetattr(STDIN_FILENO, &tp);
+ save = tp;
+ tp.c_lflag &= ~ICANON;
+ tcsetattr(STDIN_FILENO, TCSANOW, &tp);
+ ioctl(STDIN_FILENO, FIONREAD, &byteswaiting);
+ tcsetattr(STDIN_FILENO, TCSANOW, &save);
+
+ return byteswaiting;
+}
+
int
main(int argc, char **argv) {
@@ -310,7 +327,7 @@ main(int argc, char **argv) {
if (fds[0].revents & POLLIN) {
handle_user_input();
}
- if (fds[1].revents & POLLIN) {
+ if (fds[1].revents & POLLIN && (keyboardhit() < 1)) {
int rc = handle_server_message();
if (rc != 0) {
if (rc == -2) return EXIT_FAILURE;