magidoor/MD_Getc.c
2019-11-30 18:32:36 +10:00

26 lines
559 B
C

#include <errno.h>
#include <stdio.h>
#include <sys/socket.h>
#include <unistd.h>
#include "MagiDoor.h"
char md_getc() {
char c;
ssize_t ret;
while (1) {
if (mdcontrol.socket == -1) {
ret = read(STDIN_FILENO, &c, 1);
} else {
ret = recv(mdcontrol.socket, &c, 1, 0);
}
if (ret == 0) {
md_exit(0);
}
if (ret == -1 && (errno == EAGAIN || errno == EWOULDBLOCK)) {
sleep(1);
continue;
}
md_putchar(c);
return c;
}
}