Skip to content

Instantly share code, notes, and snippets.

@lukaskollmer
Created December 13, 2018 09:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lukaskollmer/7c7394dc62f15f452a48293e2677c039 to your computer and use it in GitHub Desktop.
Save lukaskollmer/7c7394dc62f15f452a48293e2677c039 to your computer and use it in GitHub Desktop.
//
// 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