Created
December 13, 2018 09:00
-
-
Save lukaskollmer/7c7394dc62f15f452a48293e2677c039 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// server.c | |
// exercise-08 | |
// | |
// Created by Lukas Kollmer on 2018-12-12. | |
// Copyright © 2018 Lukas Kollmer. All rights reserved. | |
// | |
#include <stdio.h> | |
#include <stdlib.h> | |
#include <string.h> | |
#include <sys/socket.h> | |
#include <netinet/in.h> | |
#include <time.h> | |
#include "list.h" | |
// Forward Declarations | |
void hexdump(FILE *output, const char *buffer, int length); | |
// Macros | |
#define PORT_ECHO 44445 | |
// Implementation | |
/* | |
int socket (int domain, int type, int protocol); | |
int bind (int sockfd, const struct sockaddr *addr, socklen_t addrlen); | |
int listen (int sockfd, int backlog); | |
int accept (int sockfd, struct sockaddr *addr, socklen_t *addrlen); | |
ssize_t sendto (int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen); | |
ssize_t recvfrom (int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen); | |
int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); | |
int poll(struct pollfd *fds, nfds_t nfds, int timeout); | |
epoll(7) | |
nc(1) | |
*/ | |
#define TRY(expr, label) do { if ((expr) != 0) LKFatalError("[%s]", label); } while (0); | |
void createEchoSocket() { | |
auto socket_fd = socket(AF_INET, SOCK_STREAM, 0); | |
if (socket_fd < 0) { | |
LKFatalError("Error creating socket"); | |
} | |
struct sockaddr_in server_addr; | |
memset(&server_addr, 0, sizeof(server_addr)); | |
server_addr.sin_family = AF_INET; | |
server_addr.sin_addr.s_addr = htonl(INADDR_ANY); | |
server_addr.sin_port = htons(PORT_ECHO); | |
TRY(bind(socket_fd, (struct sockaddr *) &server_addr, sizeof(server_addr)), "Bind"); | |
TRY(listen(socket_fd, 10), "Listen") | |
char buffer[BUFSIZ]; | |
memset(buffer, 0, sizeof(buffer)); | |
while (1) { | |
auto client_fd = accept(socket_fd, NULL, NULL); | |
auto length = recv(client_fd, buffer, sizeof(buffer), 0); | |
LKLog("length: %i, buffer: '%s'", length, buffer); | |
/*auto ticks = time(NULL); | |
snprintf(buffer, sizeof(buffer), "%s\n", ctime(&ticks)); | |
write(client_fd, buffer, strlen(buffer));*/ | |
close(client_fd); | |
sleep(1); | |
} | |
} | |
int main(int argc, const char **argv) { | |
logf; | |
createEchoSocket(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment