diff options
Diffstat (limited to 'src/main.c')
| -rw-r--r-- | src/main.c | 35 |
1 files changed, 31 insertions, 4 deletions
@@ -38,10 +38,37 @@ int main() { perror("could not run poll"); return 1; } - char buf[1024]; - ssize_t n; - while ((n = read(conn, buf, sizeof(buf))) > 0) { - write(conn, buf, n); + if (fds[0].revents & POLLIN) { + /* we accept the connections */ + int conn = accept(sfd, NULL, NULL); + if (conn == -1) { + perror("could not accept connection"); + continue; /* if one client is not able to connect the server shall not + die */ + } + fds[nfds].fd = conn; /* read */ + fds[nfds].events = + POLLIN; /* check if telnet client has something to say */ + nfds++; + } + for (nfds_t i = 1; i < nfds; i++) { + /* if client has something to say */ + if (fds[i].revents & POLLIN) { + char buf[1024]; + ssize_t n = read(fds[i].fd, buf, + sizeof(buf)); /* read the n which the client sent */ + if (n <= 0) { + /* close the connection if client disappeared or disconnected */ + close(fds[i].fd); + } else { + /* send every n bytes to the other clients */ + for (nfds_t j = 1; j < nfds; j++) { + if (j != i) { + write(fds[j].fd, buf, n); + } + } + } + } } } return 0; |
