int handler4(int socket) { int err = 0; rcache_t cache; jlexer_t lexer; struct timeval tv; tv.tv_sec = 1; tv.tv_usec = 0; setsockopt(socket, SOL_SOCKET, SO_RCVTIMEO, (const char*)&tv, sizeof tv); rcache_init(&cache, socket); jlexer_init(&lexer, &cache); char token[1024]; int type = 0; while ((type = jlexer_gettoken(&lexer, token)) != JLEXTOK_END) { printf("%d: %s\n", type, token); } printf("= %d: %s\n", type, token); //rcache_destroy(&cache); return 0; } int handler5(int socket) { int err = 0; rcache_t cache; rcache_init(&cache, socket); char c = '\0'; while ((c = rcache_getc(&cache)) != EOF) { printf("%c", c); if (c == '}') { dprintf(socket, "good bay!\n"); close(socket); } } rcache_destroy(&cache); return 0; } int handler3(int socket) { //struct timeval tv; //tv.tv_sec = 1; //tv.tv_usec = 0; //setsockopt(socket, SOL_SOCKET, SO_RCVTIMEO, (const char*)&tv, sizeof tv); const int bsize = 1024; char buffer[bsize]; ssize_t rsize = 0; ssize_t tsize = 0; while(true) { memset(buffer, '\0', bsize); rsize = read(socket, buffer, bsize); if (rsize < 0) { log_debug("Socket error: %s", strerror(errno)); if (errno != EAGAIN) { return -1; } } else if (rsize == 0) { log_debug("Socket rsize is zero"); return 0; } else { tsize += rsize; printf("%ld:%s\n", rsize, buffer); } } return 0; }