Я пытаюсь создать чат-программу на c, основная проблема в том, что я не хочу использовать потоки, поэтому для этого мне нужно использовать select, чтобы отслеживать входящие сообщения из сокета, имоего stdin.
Я уже провел некоторый поиск того, как сделать выбор, часть сокета, кажется, в порядке, но я не могу получить stdin правильно.
fd_set read_fds;
FD_ZERO(&read_fds);
FD_SET(STDIN_FILENO, &read_fds);
FD_SET(sock_fd, &read_fds);
while(1){
select(sock_fd+1, &read_fds, NULL, NULL, NULL);
if(FD_ISSET(sock_fd, &read_fds) != 0) {
printf("Entered case for receive message\n");
char buf[4096];
memset(buf, 0, sizeof(buf));
int lastBit;
lastBit = recv(sock_fd, buf, sizeof(buf), 0);
if (lastBit > 0 && lastBit < 4096)
{
buf[lastBit] = '\0';
}
else
{
close(sock_fd);
//break;
}
printf("%s\n", buf);
} else if (FD_ISSET(STDIN_FILENO, &read_fds)) {
printf("Entered case for send message\n");
char msg[4096];
memset(msg, 0, sizeof(msg));
read(0, msg, sizeof(msg));
}
}
При этом я ожидаю, что когда я получу новое сообщение с сервера, сообщение будет напечатано (это нормально), а когда что-то введено, код должен отправить его на мой сервер (все еще не в порядке).