| | |
| | | int n; |
| | | net_mod_request_head_t request_head; |
| | | net_mod_response_head_t response_head; |
| | | void *buf, *recv_buf; |
| | | void *recv_buf; |
| | | static void *buf = NULL; |
| | | int recv_size; |
| | | |
| | | size_t max_buf = 8096; |
| | | |
| | | buf = malloc(max_buf); |
| | | static size_t max_buf = 1024; |
| | | if(buf == NULL) { |
| | | err_exit(errno, "process_client malloc"); |
| | | buf = malloc(max_buf); |
| | | if(buf == NULL) { |
| | | err_exit(errno, "process_client malloc"); |
| | | } |
| | | } |
| | | |
| | | |
| | | if ((n = rio_readnb(rio, &request_head, sizeof(net_mod_request_head_t))) != sizeof(net_mod_request_head_t)) |
| | | { |
| | | free(buf); |
| | | return -1; |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | if ((n = rio_readnb(rio, buf, request_head.content_length)) != request_head.content_length ) { |
| | | free(buf); |
| | | return -1; |
| | | } |
| | | |
| | | shmModSocket.sendandrecv(buf, request_head.content_length, request_head.key, &recv_buf, &recv_size); |
| | | response_head.content_length = recv_size; |
| | | Rio_writen(connfd, &response_head, sizeof(response_head)); |
| | | Rio_writen(connfd, recv_buf, recv_size); |
| | | free(buf); |
| | | if(request_head.mod == REQ_REP) { |
| | | shmModSocket.sendandrecv(buf, request_head.content_length, request_head.key, &recv_buf, &recv_size); |
| | | response_head.content_length = recv_size; |
| | | Rio_writen(connfd, &response_head, sizeof(response_head)); |
| | | Rio_writen(connfd, recv_buf, recv_size); |
| | | } |
| | | |
| | | return 0; |
| | | |
| | | } |