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);
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)
{
}
if (num_byte <0 && errno != EAGAIN)
return;
+ if (num_byte == 0)
+ {
+ if (quit_on_eof_)
+ return;
+ else
+ stdin_valid_fd=0;
+ }
}
- FD_SET(STDIN_FILENO,&fds_r);
FD_SET(fd,&fds_r);
+ if (stdin_valid_fd)
+ FD_SET(STDIN_FILENO,&fds_r);
}
}
{
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;
- for(;;)
+ socket_fd = establish_socket_connection(socket_file);
+ if(socket_fd)
{
- socket_fd = establish_socket_connection(socket_file_);
- if(socket_fd < 0)
- ret = 2;
- else {
- //~ ret = set_tty_raw(STDIN_FILENO,&tmio_prev);
- //~ if (ret)
- //~ break;
- fcntl(STDIN_FILENO, F_SETFL, O_NONBLOCK);
- connect_terminal(socket_fd);
-
- //~ ret = restore_tty(STDIN_FILENO,&tmio_prev);
- //~ if (ret)
- //~ break;
- }
- if (ret == 2) {
- fprintf(stderr, "%s error, trying to reopen in 5 seconds..\n", socket_file_);
- if(socket_fd > 0)
- shutdown(socket_fd,SHUT_RDWR);
- sleep(5);
- }
- else
- break;
+ //~ ret = set_tty_raw(STDIN_FILENO,&tmio_prev);
+ //~ if (ret)
+ //~ break;
+ fcntl(STDIN_FILENO, F_SETFL, O_NONBLOCK);
+ connect_terminal(socket_fd);
+
+ //~ ret = restore_tty(STDIN_FILENO,&tmio_prev);
+ //~ if (ret)
+ //~ break;
+ }
+ else
+ {
+ fprintf(stderr, "%s error, aborting..\n", socket_file);
+ ret=2;
}
if(socket_fd > 0)