Ab sofort ist der Login auf der Weboberfläche von git.fh-muenster.de bevorzugt über FH Muenster SSO möglich.

Commit c62b6bb1 authored by Sebastian Schinzel's avatar Sebastian Schinzel

Fixt Formatierung.

parent c82db4fd
...@@ -21,8 +21,8 @@ int maxfd; ...@@ -21,8 +21,8 @@ int maxfd;
* Fehlerbehandlung. * Fehlerbehandlung.
*/ */
void error(char *msg) { void error(char *msg) {
fprintf(stderr, "%s\n", msg); fprintf(stderr, "%s\n", msg);
exit(1); exit(1);
} }
...@@ -31,42 +31,42 @@ void error(char *msg) { ...@@ -31,42 +31,42 @@ void error(char *msg) {
* angenommen werden. * angenommen werden.
*/ */
void setup_socket() { void setup_socket() {
int opt = 1; int opt = 1;
/* /*
* Setzt Konfigurationsvariablen für den Socket, z. B. die Portnummer. * Setzt Konfigurationsvariablen für den Socket, z. B. die Portnummer.
*/ */
bzero((char *) &serv_addr, sizeof(serv_addr)); bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET; serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY; serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons(PORT); serv_addr.sin_port = htons(PORT);
/* /*
* Erstelle den Socket. * Erstelle den Socket.
*/ */
sockfd = socket(AF_INET, SOCK_STREAM, 0); sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) if (sockfd < 0)
error("ERROR opening socket"); error("ERROR opening socket");
/* /*
* Verwende den Socket, selbst wenn er aus einer vorigen Ausführung * Verwende den Socket, selbst wenn er aus einer vorigen Ausführung
* im TIME_WAIT Status ist. * im TIME_WAIT Status ist.
*/ */
setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,(const char *)&opt,sizeof(int)); setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (const char *) &opt, sizeof(int));
/* /*
* Melde, dass der Socket eingehende Verbindungen akzeptieren soll. * Melde, dass der Socket eingehende Verbindungen akzeptieren soll.
*/ */
if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0)
error("ERROR on binding"); error("ERROR on binding");
/* /*
* Horche auf dem Socket nach eingehenden Verbindungen. Es werden maximal * Horche auf dem Socket nach eingehenden Verbindungen. Es werden maximal
* fünf gleichzeitige Verbindungen erlaubt. * fünf gleichzeitige Verbindungen erlaubt.
*/ */
listen(sockfd, 5); listen(sockfd, 5);
/* Lege fest in welchem 'Bereich' später select() 'warten' soll. ( hier: 0 - 3)*/ /* Lege fest in welchem 'Bereich' später select() 'warten' soll. ( hier: 0 - 3)*/
maxfd = 1 + ((sockfd > STDIN_FILENO) ? sockfd : STDIN_FILENO); maxfd = 1 + ((sockfd > STDIN_FILENO) ? sockfd : STDIN_FILENO);
} }
...@@ -75,83 +75,86 @@ void setup_socket() { ...@@ -75,83 +75,86 @@ void setup_socket() {
*/ */
void main_loop() { void main_loop() {
int length = 0; ssize_t length = 0;
char* buffer = malloc(BUFFER_SIZE); char *buffer = malloc(BUFFER_SIZE);
if(buffer == NULL) { if (buffer == NULL) {
error("ERROR at malloc."); error("ERROR at malloc.");
} }
/* /*
* Die Hauptschleife des Programms. * Die Hauptschleife des Programms.
*/ */
while (1) { while (1) {
/* "Datenhygiene" */ /* "Datenhygiene" */
bzero(buffer, BUFFER_SIZE); bzero(buffer, BUFFER_SIZE);
FD_ZERO(&fds); FD_ZERO(&fds);
FD_SET(sockfd, &fds); FD_SET(sockfd, &fds);
FD_SET(STDIN_FILENO, &fds); FD_SET(STDIN_FILENO, &fds);
/* select() erlaubt es auf mehrere file descriptors (FD_SETs) /*
(z.B. socket und stdin) zu warten, bis einer "ready" für * select() erlaubt es auf mehrere file descriptors (FD_SETs)
jegliche I/O operation (z.B. 'read()' ) ist. */ * (z.B. socket und stdin) zu warten, bis einer "ready" für
* jegliche I/O operation (z.B. 'read()' ) ist.
*/
select(maxfd, &fds, NULL, NULL, NULL); select(maxfd, &fds, NULL, NULL, NULL);
if (FD_ISSET(STDIN_FILENO, &fds)){ if (FD_ISSET(STDIN_FILENO, &fds)) {
length = read(STDIN_FILENO, buffer, BUFFER_SIZE - 1); length = read(STDIN_FILENO, buffer, BUFFER_SIZE - 1);
// Testweise Server sauber beenden mit '.' als Input über Konsole // Testweise Server sauber beenden mit '.' als Input über Konsole
if(buffer[0]=='.') if (buffer[0] == '.')
break; break;
if (length < 0) if (length < 0)
error("ERROR reading from stdin"); error("ERROR reading from stdin");
} }
//Input aus Socket //Input aus Socket
if (FD_ISSET(sockfd, &fds)){ if (FD_ISSET(sockfd, &fds)) {
const int newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen); const int newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);
if (newsockfd < 0) if (newsockfd < 0)
error("ERROR on accept"); error("ERROR on accept");
length = read(newsockfd, buffer, BUFFER_SIZE - 1); length = read(newsockfd, buffer, BUFFER_SIZE - 1);
if (length < 0) if (length < 0)
error("ERROR reading from socket"); error("ERROR reading from socket");
/* /*
* Schreibe die ausgehenden Daten auf den Socket zurück. * Schreibe die ausgehenden Daten auf den Socket zurück.
*/ */
length = write(newsockfd, buffer, length); length = write(newsockfd, buffer, length);
if (length < 0) if (length < 0)
error("ERROR writing to socket"); error("ERROR writing to socket");
/* /*
* Schließe die Verbindung. * Schließe die Verbindung.
*/ */
close(newsockfd); close(newsockfd);
} }
/* /*
* Gib die eingegangenen Daten (zusätzlich) auf der Kommandozeile aus. * Gib die eingegangenen Daten (zusätzlich) auf der Kommandozeile aus.
*/ */
length = write(STDIN_FILENO, buffer, length); length = write(STDIN_FILENO, buffer, length);
if (length < 0) if (length < 0)
error("ERROR writing to stdin"); error("ERROR writing to stdin");
} }
/* /*
* Lösche den Buffer und schließe den Socket. Dieser Aufruf sollte wegen der * Lösche den Buffer und schließe den Socket. Dieser Aufruf sollte wegen der
* Endlosschleife niemals ausgeführt werden. * Endlosschleife niemals ausgeführt werden.
*/ */
free(buffer); free(buffer);
close(sockfd); close(sockfd);
} }
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
setup_socket(); setup_socket();
main_loop(); main_loop();
return 0; return 0;
} }
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment