title: How do I use setsockopt(SO_REUSEADDR)?
body: <p>I am running my own http server on a raspberry pi. The problem is when I stop the program and restart it, the port is no longer available. Sometimes I get the same issue when receiving lots of requests.<br>
  I want to use SO_REUSEADDR so that I can keep using the port even when the error occurs but have had no luck getting it set up. Below is my code.<br>
  The error I get is "ERROR on binding:Address already in use".</p>
  
  <pre><code>#include &lt;stdio.h&gt;
  #include &lt;stdlib.h&gt;
  #include &lt;string.h&gt;
  #include &lt;unistd.h&gt;
  #include &lt;sys/types.h&gt; 
  #include &lt;sys/socket.h&gt;
  #include &lt;netinet/in.h&gt;
  
  void error(const char *msg)
  {
      perror(msg);
      exit(1);
  }
  
  int main(int argc, char *argv[])
  {
      printf("Starting Listener\n");
       int sockfd, newsockfd, portno;
       socklen_t clilen;
       char buffer[256];
       struct sockaddr_in serv_addr, cli_addr;
       int n;
       if (argc &lt; 2) {
           fprintf(stderr,"ERROR, no port provided\n");
           exit(1);
       }
       sockfd = socket(AF_INET, SOCK_STREAM, 0);
       if (sockfd &lt; 0) 
          error("ERROR opening socket");
       bzero((char *) &amp;serv_addr, sizeof(serv_addr));
       portno = atoi(argv[1]);
       serv_addr.sin_family = AF_INET;
       serv_addr.sin_addr.s_addr = INADDR_ANY;
       serv_addr.sin_port = htons(portno);
       if (bind(sockfd, (struct sockaddr *) &amp;serv_addr,
                sizeof(serv_addr)) &lt; 0) 
                error("ERROR on binding");
  
       printf("about to listen\n");
       listen(sockfd,5);
       printf("finished listening\n");
       clilen = sizeof(cli_addr);
       printf("About to accept\n");
  
       int i;
       for(i=0; i&lt;100; i++){
           newsockfd = accept(sockfd, 
                   (struct sockaddr *) &amp;cli_addr, 
                   &amp;clilen);
  
           if (newsockfd &lt; 0) 
               error("ERROR on accept");
           bzero(buffer,256);
           n = read(newsockfd,buffer,255);
           if (n &lt; 0) error("ERROR reading from socket");
           printf("Here is the message: %s\n",buffer);
           n = write(newsockfd,"I got your message",18);
           if (n &lt; 0) error("ERROR writing to socket");
           close(newsockfd);
       }
       close(sockfd);
       return 0; 
  }
  </code></pre>