From 53c899322a2a40746f3ffd0950532a2bcdc7249e Mon Sep 17 00:00:00 2001 From: deuce <> Date: Mon, 12 May 2003 06:12:01 +0000 Subject: [PATCH] QNX doesn't have poll. :-( Also, add -g to CFLAGS if a debug build is requested. --- src/sbbs3/umonitor/GNUmakefile | 1 + src/sbbs3/umonitor/umonitor.c | 78 +++++++++++++++------------------- 2 files changed, 35 insertions(+), 44 deletions(-) diff --git a/src/sbbs3/umonitor/GNUmakefile b/src/sbbs3/umonitor/GNUmakefile index 4f094fa19e..3bbbb92f06 100644 --- a/src/sbbs3/umonitor/GNUmakefile +++ b/src/sbbs3/umonitor/GNUmakefile @@ -22,6 +22,7 @@ endif ifdef DEBUG BUILD = debug + CFLAGS += -g else BUILD = release endif diff --git a/src/sbbs3/umonitor/umonitor.c b/src/sbbs3/umonitor/umonitor.c index cfeafcaf14..f92b247efa 100644 --- a/src/sbbs3/umonitor/umonitor.c +++ b/src/sbbs3/umonitor/umonitor.c @@ -37,7 +37,11 @@ #include "conwrap.h" /* this has to go BEFORE curses.h so getkey() can be macroed around */ #include <curses.h> -#include <poll.h> +#include <sys/types.h> +#include <sys/time.h> +#ifdef __QNX__ +#include <string.h> +#endif #include <stdio.h> #include <termios.h> #include <unistd.h> @@ -74,6 +78,7 @@ enum { enum { SPY_NOSOCKET ,SPY_NOCONNECT + ,SPY_SELECTFAILED ,SPY_SOCKETLOST ,SPY_STDINLOST ,SPY_CLOSED @@ -115,14 +120,13 @@ int spyon(char *sockname) { int i; struct termios tio; struct termios old_tio; - struct pollfd pset[2]; + fd_set rd; BOOL b; int retval=0; /* ToDo Test for it actually being a socket! */ /* Well, it will fail to connect won't it? */ - if((spy_sock=socket(PF_LOCAL,SOCK_STREAM,0))==INVALID_SOCKET) { printf("ERROR %d creating local spy socket", errno); return(SPY_NOSOCKET); @@ -141,12 +145,11 @@ int spyon(char *sockname) { cfmakeraw(&tio); tcsetattr(STDIN_FILENO,TCSANOW,&tio); printf("\r\n\r\nLocal spy mode... press CTRL-C to return to monitor\r\n\r\n"); - pset[0].fd=STDIN_FILENO; - pset[0].events=POLLIN; - pset[1].fd=spy_sock; - pset[1].events=POLLIN; while(spy_sock!=INVALID_SOCKET) { - if((poll(pset,2,-1))<0) { + FD_ZERO(&rd); + FD_SET(STDIN_FILENO,&rd); + FD_SET(spy_sock,&rd); + if((select(spy_sock > STDIN_FILENO ? spy_sock+1 : STDIN_FILENO+1,&rd,NULL,NULL,NULL))<0) { close(spy_sock); spy_sock=INVALID_SOCKET; break; @@ -157,52 +160,36 @@ int spyon(char *sockname) { retval=SPY_SOCKETLOST; break; } - if(pset[0].revents) { - if(pset[0].revents&(POLLNVAL|POLLHUP|POLLERR)) { + if(FD_ISSET(STDIN_FILENO,&rd)) { + if((i=read(STDIN_FILENO,&key,1))==1) { + /* Check for control keys */ + switch(key) { + case 3: /* CTRL-C */ + close(spy_sock); + spy_sock=INVALID_SOCKET; + retval=SPY_CLOSED; + break; + default: + write(spy_sock,&key,1); + } + } + else if(i<0) { close(spy_sock); spy_sock=INVALID_SOCKET; retval=SPY_STDINLOST; break; } - else { - if((i=read(STDIN_FILENO,&key,1))==1) { - /* Check for control keys */ - switch(key) { - case CTRL('c'): - close(spy_sock); - spy_sock=INVALID_SOCKET; - retval=SPY_CLOSED; - break; - default: - write(spy_sock,&key,1); - } - } - else if(i<0) { - close(spy_sock); - spy_sock=INVALID_SOCKET; - retval=SPY_STDINLOST; - break; - } - } } - if(pset[1].revents) { - if(pset[1].revents&(POLLNVAL|POLLHUP|POLLERR)) { + if(spy_sock != INVALID_SOCKET && FD_ISSET(spy_sock,&rd)) { + if((i=read(spy_sock,&buf,1))==1) { + write(STDOUT_FILENO,buf,1); + } + else if(i<0) { close(spy_sock); spy_sock=INVALID_SOCKET; retval=SPY_SOCKETLOST; break; } - else { - if((i=read(spy_sock,&buf,1))==1) { - write(STDOUT_FILENO,buf,1); - } - else if(i<0) { - close(spy_sock); - spy_sock=INVALID_SOCKET; - retval=SPY_SOCKETLOST; - break; - } - } } } tcsetattr(STDIN_FILENO,TCSANOW,&old_tio); @@ -759,7 +746,10 @@ int main(int argc, char** argv) { sprintf(str2,"Failed to connect to %s",str); uifc.msg(str2); break; - + + case SPY_SELECTFAILED: + uifc.msg("select() failed, connection terminated."); + case SPY_SOCKETLOST: uifc.msg("Spy socket lost"); break; -- GitLab