X-Git-Url: https://git.realraum.at/?a=blobdiff_plain;f=serial_console%2Fusocket.c;h=01d50907dc5491ecd90a239fd57e57faa87907f3;hb=37d6abaf740685bd337da1632e1652fc77916760;hp=d00a8b5f3cbe9ff172417c618f4fe916fe2dd361;hpb=51b8c0cb530de874de351d6a7d954c21a7644a3e;p=svn42.git diff --git a/serial_console/usocket.c b/serial_console/usocket.c index d00a8b5..01d5090 100644 --- a/serial_console/usocket.c +++ b/serial_console/usocket.c @@ -42,6 +42,7 @@ void connect_terminal(int fd) fd_set fds_r; char buffer[1024]; int num_byte=0; + char stdin_valid_fd=1; FD_ZERO(&fds_r); FD_SET(STDIN_FILENO,&fds_r); @@ -58,18 +59,29 @@ void connect_terminal(int fd) if (num_byte == 0 || (num_byte <0 && errno != EAGAIN)) return; } - if (FD_ISSET(STDIN_FILENO,&fds_r)) + if (stdin_valid_fd && FD_ISSET(STDIN_FILENO,&fds_r)) { while((num_byte = read(STDIN_FILENO,buffer, 1024)) > 0) { send(fd,buffer,num_byte,0); } - if (num_byte == 0 || (num_byte <0 && errno != EAGAIN)) + if (num_byte <0 && errno != EAGAIN) return; + if (num_byte == 0) + { + if (quit_on_eof_) + return; + else + { + stdin_valid_fd=0; + FD_CLR(STDIN_FILENO,&fds_r); + } + } } - FD_SET(STDIN_FILENO,&fds_r); FD_SET(fd,&fds_r); + if (stdin_valid_fd) + FD_SET(STDIN_FILENO,&fds_r); } } @@ -104,12 +116,19 @@ int main(int argc, char* argv[]) { int ret = 0; int socket_fd = 0; + char *socket_file; //~ struct termios tmio_prev; + if (argc > 1) + socket_file = argv[1]; + else + socket_file = default_socket_file_; - if (argc > 0) - socket_file_ = argv[1]; + //give a second argument, to not quit on EOF on stdin. + //useful if you just want to pipe some commands to usocket with echo and then listen to stdout + if (argc > 2) + quit_on_eof_=0; - socket_fd = establish_socket_connection(socket_file_); + socket_fd = establish_socket_connection(socket_file); if(socket_fd) { //~ ret = set_tty_raw(STDIN_FILENO,&tmio_prev); @@ -124,7 +143,7 @@ int main(int argc, char* argv[]) } else { - fprintf(stderr, "%s error, aborting..\n", socket_file_); + fprintf(stderr, "%s error, aborting..\n", socket_file); ret=2; }