[ create a new paste ] login | about

Link: http://codepad.org/iOcLJjev    [ raw code | output | fork ]

C, pasted on Jan 30:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <pthread.h>
#include<sys/wait.h>
#include<time.h>

#define PORT 80
#define MAXDATA 4096

static char *msg[] = { "Time flies like an arrow.","Practice makes perfect.","Efforts will always pay off.","Seeing is believing."};

static int conne_sockS;

void sig_handler(int signum) {
    while (0 < waitpid(-1, NULL, WNOHANG));
}

void *process_thread(void *arg) {
  int mid;
  int rsize;
  char buf[MAXDATA];
  char webpage[2048];

  rsize = recv(conne_sockS, buf, MAXDATA, 0);
  if (rsize <= 0) {
    printf("Connection closed.\n");
    return NULL;
  }
  puts("\n<<<< RECEIVED MESSAGE FROM HERE <<<< ");
  puts(buf);
  puts(">>>> RECEIVED MESSAGE END HERE >>>>\n");
  if(strncmp("GET /", buf, 5) != 0) {
    return NULL;
  }

  srand(time(NULL));
  mid = rand() % 4;
  strcpy(webpage, "<HTML><BODY><H1>\n");
  sprintf(webpage + strlen(webpage),"PPID:%d<BR>\n", getppid());
  sprintf(webpage + strlen(webpage),"PID:%d<BR>\n", getpid());
  sprintf(webpage + strlen(webpage),"thread:%ld<BR>\n", (long)pthread_self());
  strcat(webpage, "<HR>\n");
  strcat(webpage, msg[mid]);
  strcat(webpage, "</H1></BODY><HTML>\n");
  strcpy(buf, "HTML/1.0 200 OK\n");
  sprintf(buf + strlen(buf), "Content-Length: %d\n", strlen(webpage));
  strcat(buf, "\n");
  strcat(buf, webpage);
  strcat(buf,"\n");
  puts("\n<<<< SEND MESSAGE FROM HERE <<<< ");
  puts(buf);
  puts(">>>> SEND MESSAGE END HERE >>>>\n");
  send(conne_sockS, buf, strlen(buf), 0);
  return NULL;
}

int main(void) {
  signal(SIGCHLD, sig_handler);
  struct sockaddr_in my_adr;
  struct sockaddr_in clnt_adr;
  socklen_t len = sizeof(struct sockaddr_in);
  int lis_sock;
  pthread_t pt;

  char *rtn = 0;

  lis_sock = socket(AF_INET, SOCK_STREAM, 0);
  int opt = 1;
  setsockopt(lis_sock, SOL_SOCKET, SO_REUSEADDR, (char *)&opt, sizeof(int));
  bzero((char *)&my_adr, sizeof(my_adr));
  
  my_adr.sin_family = PF_INET;
  my_adr.sin_addr.s_addr = INADDR_ANY;
  my_adr.sin_port = htons(PORT);
  bind(lis_sock, (struct sockaddr *)&my_adr, len);
  
  listen(lis_sock, SOMAXCONN);
  printf("PID:%d\nStart Listening Port : %d...\n", getpid(), PORT);
  
  while (1) {
    conne_sockS = accept(lis_sock, (struct sockaddr *)&clnt_adr, &len);
    pthread_create(&pt, NULL, &process_thread, NULL);
    pthread_join(pt, (void **)&rtn);
    close(conne_sockS);
  }
  return 0;
}
/* end */


Output:
1
2
3
In function `main':
undefined reference to `pthread_create'
undefined reference to `pthread_join'


Create a new paste based on this one


Comments: