title: Listen: Operation Not supported error
body: <p>I am working on a raw sockets program in <code>Ubuntu</code> using <code>C</code> programming language. As I am using raw sockets, I need to use the <code>SOCK_RAW</code> type instead of <code>SOCK_STREAM</code>. Using <code>SOCK_RAW</code> in turn disables me from using the <code>listen()</code> by throwing a </p>
  
  <pre><code>"Listen:Operation not supported error".
  </code></pre>
  
  <p>What do I do to rectify this?
   Below is the code I am working on:</p>
  
  <pre><code>&lt;header files&gt;
  .
  .
  if((sock=socket(AF_INET,SOCK_RAW,IPPROTO_RAW))==-1)
  {
  perror("Socket");
  exit(1);
  }
  if(setsockopt(sock,SOL_SOCKET,SO_BROADCAST,&amp;true,sizeof(true))==-1)
  {
  perror("Setsockopt");
  exit(1);
  }
  server_addr.sin_family=AF_INET;
  server_addr.sin_port=htons(9392);
  server_addr.sin_addr.s_addr=INADDR_ANY;
  bzero(&amp;(server_addr.sin_zero),8);
  if(bind(sock,(struct sockaddr *)&amp;server_addr,sizeof(struct sockaddr))==-1)
  {
  perror("Unable to bind");
  exit(1);
  }
  if(listen(sock,5)==-1)
  {
  perror("Listen");
  exit(1);
  }
  printf("\nTCP Server waiting for client on port 9392");
  fflush(stdout);
  while(1)
  {
  sin_size=sizeof(struct sockaddr_in);
  connected=accept(sock,(struct sockaddr *)&amp;client_addr,&amp;sin_size);
  printf("\nI got a connection from (%s,%d)",inet_ntoa(client_addr.sin_addr),ntohs(client_addr.sin_port));
  while(1)
  {
  printf("\nSEND (q or Q to quit):");
  scanf("%s",send_data);
  if(strcmp(send_data,"q")==0||strcmp(send_data,"Q")==0)
  {
  send(connected,send_data,strlen(send_data),0);
  close(connected);
  exit(0);
  }
  else
  send(connected,send_data,strlen(send_data),0);
  bytes_recieved=recv(connected,recv_data,1024,0);
  recv_data[bytes_recieved]='\0';
  .
  .
  .
  .    
  </code></pre>