summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main.c35
1 files changed, 31 insertions, 4 deletions
diff --git a/src/main.c b/src/main.c
index a1825d6..d21a326 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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;