/* Aggressive variant: no usleep, tighter loop, more concurrent sockets */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
static volatile int stop=0;
static int dbg=1;
static void *p(void *a){long t=(long)a;struct sockaddr_in sin;memset(&sin,0,sizeof sin);
 sin.sin_family=AF_INET;sin.sin_len=sizeof sin;inet_pton(AF_INET,"127.0.0.1",&sin.sin_addr);
 for(long i=0;!stop;i++){
  int s=socket(AF_INET,SOCK_STREAM,0);if(s<0)continue;
  setsockopt(s,SOL_SOCKET,SO_DEBUG,&dbg,sizeof dbg);
  sin.sin_port=htons(10000+((t*7+i)&0x3fff));
  connect(s,(struct sockaddr*)&sin,sizeof sin);
  char b='x';write(s,&b,1);close(s);
 } return 0;}
int main(int c,char**v){int n=c>1?atoi(v[1]):16;int d=c>2?atoi(v[2]):45;
 struct sockaddr_in la;memset(&la,0,sizeof la);la.sin_family=AF_INET;la.sin_len=sizeof la;
 la.sin_addr.s_addr=htonl(INADDR_LOOPBACK);la.sin_port=htons(10000);
 int ls=socket(AF_INET,SOCK_STREAM,0),one=1;
 setsockopt(ls,SOL_SOCKET,SO_REUSEADDR,&one,sizeof one);
 if(bind(ls,(struct sockaddr*)&la,sizeof la)==0){listen(ls,256);if(fork()==0){
  for(;;){int a=accept(ls,0,0);if(a>=0){char b;read(a,&b,1);close(a);}}_exit(0);}}
 pthread_t*th=calloc(n,sizeof*th);
 for(long i=0;i<n;i++)pthread_create(&th[i],0,p,(void*)i);
 printf("aggressive: %d threads x %ds\n",n,d);fflush(stdout);
 sleep(d);stop=1;
 for(int i=0;i<n;i++)pthread_join(th[i],0);
 puts("done");return 0;}
