myco-indexer.c 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #include <sys/types.h>
  2. #include <sys/socket.h>
  3. #include <netinet/in.h>
  4. #include <arpa/inet.h>
  5. #include <unistd.h>
  6. #include <stdlib.h>
  7. #include <stdio.h>
  8. #include <string.h>
  9. #define BUF 1024
  10. int myco_indexer_start(int port) {
  11. int create_socket, new_socket;
  12. socklen_t addrlen;
  13. char *buffer = malloc (BUF);
  14. ssize_t size;
  15. struct sockaddr_in address;
  16. const int y = 1;
  17. printf ("\e[2J");
  18. if ((create_socket=socket (AF_INET, SOCK_STREAM, 0)) > 0)
  19. printf ("Socket wurde angelegt\n");
  20. setsockopt( create_socket, SOL_SOCKET,
  21. SO_REUSEADDR, &y, sizeof(int));
  22. address.sin_family = AF_INET;
  23. address.sin_addr.s_addr = INADDR_ANY;
  24. address.sin_port = htons (port);
  25. if (bind ( create_socket,
  26. (struct sockaddr *) &address,
  27. sizeof (address)) != 0) {
  28. printf( "Der Port ist nicht frei – belegt!\n");
  29. }
  30. listen (create_socket, 5);
  31. addrlen = sizeof (struct sockaddr_in);
  32. while (1) {
  33. new_socket = accept ( create_socket,
  34. (struct sockaddr *) &address,
  35. &addrlen );
  36. if (new_socket > 0)
  37. printf ("Ein Client (%s) ist verbunden ...\n",
  38. inet_ntoa (address.sin_addr));
  39. do {
  40. /*
  41. printf ("Nachricht zum Versenden: ");
  42. fgets (buffer, BUF, stdin);
  43. send (new_socket, buffer, strlen (buffer), 0);
  44. */
  45. size = recv (new_socket, buffer, BUF-1, 0);
  46. if( size > 0)
  47. buffer[size] = '\0';
  48. printf ("Nachricht empfangen: %s\n", buffer);
  49. } while (strcmp (buffer, "quit\n") != 0);
  50. close (new_socket);
  51. }
  52. close (create_socket);
  53. return EXIT_SUCCESS;
  54. }