fork download
  1. #include <stdio.h>
  2. #include <sys/socket.h>
  3. #include <stdlib.h>
  4. #include <string.h> //strlen
  5. #include <arpa/inet.h> //inet_addr
  6. #include <unistd.h> //write
  7. #include <pthread.h>
  8.  
  9. #define SERVER_IP "127.0.0.1"
  10. #define SERVER_PORT 8888
  11.  
  12. void *connection_handler(void *);
  13.  
  14. int main(int argc , char *argv[])
  15. {
  16. int socket_desc, new_socket, c, *new_sock;
  17. struct sockaddr_in server, client;
  18. pthread_t sniffer_thread;
  19.  
  20. //Create socket
  21. socket_desc = socket(AF_INET, SOCK_STREAM, 0);
  22.  
  23. //Sockaddr struct
  24. server.sin_family = AF_INET;
  25. server.sin_addr.s_addr = INADDR_ANY;
  26. server.sin_port = htons (SERVER_PORT);
  27.  
  28. //bind socket to a port
  29. bind(socket_desc, (struct sockaddr *)&server, sizeof(server));
  30. //puts("bind done");
  31.  
  32. //listen, max 20 connections
  33. listen(socket_desc,20);
  34.  
  35. //Accept and incoming connection
  36. puts("waiting for incoming connection...");
  37. c = sizeof(struct sockaddr_in);
  38. while(new_socket = accept(socket_desc, (struct sockaddr *)&client, (socklen_t*)&c))
  39. //while(1)
  40. {
  41. new_sock = malloc(1);
  42. *new_sock = new_socket;
  43. pthread_create(&sniffer_thread, NULL, connection_handler, (void*)new_sock);
  44. }
  45. //close(socket_desc);
  46. return 0;
  47. }
  48.  
  49. void *connection_handler(void *socket_desc)
  50. {
  51. int sock = *(int*)socket_desc;
  52. int sendback_nu;
  53. char *message, client_message[3];
  54.  
  55. read(sock, client_message, strlen(client_message));
  56. puts(client_message);
  57. printf("client_message = %s \r\n",client_message);
  58. int temp_nu = atoi(client_message);
  59. char text[5];
  60.  
  61. puts("this is a thread message");
  62. sendback_nu = temp_nu * 100 + 5;
  63. sprintf(text,"%d",sendback_nu);
  64. message = text;
  65.  
  66. write(sock, message, strlen(message));
  67. puts("send back");
  68. puts(message);
  69. free(socket_desc);
  70. return 0;
  71. }
Time limit exceeded #stdin #stdout 5s 9432KB
stdin
Standard input is empty
stdout
Standard output is empty