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