static void* masterproxy_acceptor(void *args) { pthread_t clientthread; pthread_attr_t thattr; int sock; (void)args; pthread_attr_init(&thattr); pthread_attr_setstacksize(&thattr,0x100000); pthread_attr_setdetachstate(&thattr,PTHREAD_CREATE_DETACHED); while (terminate==0) { sock = tcptoaccept(lsock,1000); if (sock>=0) { int *s = malloc(sizeof(int)); // memory is freed inside pthread routine !!! *s = sock; tcpnodelay(sock); if (pthread_create(&clientthread,&thattr,masterproxy_server,s)<0) { free(s); tcpclose(sock); } } } pthread_attr_destroy(&thattr); return NULL; }
int server() { char buffer[1024]; int ss = server_socket("127.0.0.1", "9991"); if (ss < 0) { logging(LOG_ERROR, "socket error!"); return -1; } int ns = tcptoaccept(ss, 100000); if (ns < 0) { logging(LOG_ERROR, "accept error!"); return -1; } tcpnonblock(ns); tcpnodelay(ns); tcptoread(ns, buffer, 10, 3000); /*printf("read ok %d !!\n", n); */ /*printf("read data: \n%s\n", buffer); */ assert(strcmp("helloworl", buffer) == 0); tcpclose(ns); tcpclose(ss); return 0; }