void on_read(int sock, short event, void *arg) { //cout<<"on read"<<endl; struct user *puser = (struct user*)arg; //pthread_mutex_lock(&(puser->msg_lock)); memset(puser->data, '\0',BUFFSIZE); int i = recv(sock, puser->data, 2, 0); if(i<0) return; short int len = *(short int*)(puser->data); len = ntohs(len); //cout<<"length of data:"<<len<<endl; memset(puser->data, '\0', BUFFSIZE); if((len < 0)||(len>1000000)) return; puser->msg_len = recv(sock, puser->data, len, 0); if(puser->msg_len <= 0) { cout<<"a client disconnect"<<endl; if(puser->username != "") { cout<<"setsocket re:"<<setsocket(puser->username)<<endl; } event_free(puser->read_ev); event_free(puser->write_ev); //pthread_mutex_unlock(&(puser->msg_lock)); pthread_mutex_destroy(&(puser->msg_lock)); delete(puser); // close(sock); } while(puser->msg_len < len) { puser->msg_len += recv(sock,(puser->data)+(puser->msg_len),len-(puser->msg_len),0); } if(puser->msg_len == len) { datahandle(puser); //cout<<puser->data<<endl; //pthread_mutex_unlock(&(puser->msg_lock)); } else { cout<<"resived data is error"<<endl; cout<<"serppose:"<<len<<endl; cout<<"real:"<<puser->msg_len<<endl; cout<<"data:"<<puser->data<<endl; } }
int main() { fd_set rs,ws,rfds,wfds; memset(u,'\0',sizeof(u)); bzero(&rs, sizeof(fd_set)); bzero(&ws, sizeof(fd_set)); bzero(&rfds, sizeof(fd_set)); bzero(&wfds, sizeof(fd_set)); char teststr[]="h1=127.0.0.1&p1=8899&f1=t5.txt&h2=&p2=&f2=&h3=&p3=&f3=&h4=&p4=&f4=&h5=&p5=&f5="; // parser(teststr); parser(getenv("QUERY_STRING")); sendheader(); setsocket(&rs,&ws); setselect(&rs,&ws,&rfds,&wfds); // sleep(10); return 0; }