| | |
| | | #include "net_mod_socket_io.h" |
| | | #include "net_mod_socket.h" |
| | | |
| | | NetModServerSocket::NetModServerSocket(int port) |
| | | NetModServerSocket::NetModServerSocket(int port):max_buf(1024) |
| | | { |
| | | char portstr[32]; |
| | | |
| | |
| | | sprintf(portstr, "%d", port); |
| | | listenfd = Open_listenfd(portstr); |
| | | init_pool(listenfd); |
| | | |
| | | buf = malloc(max_buf); |
| | | if(buf == NULL) { |
| | | err_exit(errno, "process_client malloc"); |
| | | } |
| | | } |
| | | |
| | | |
| | | NetModServerSocket::~NetModServerSocket() { |
| | | Close(listenfd); |
| | | fee(buf); |
| | | } |
| | | |
| | | void NetModServerSocket::start() { |
| | |
| | | int n; |
| | | net_mod_request_head_t request_head; |
| | | net_mod_response_head_t response_head; |
| | | char request_head_bs[NET_MODE_REQUEST_HEAD_LENGTH]; |
| | | void *recv_buf; |
| | | static void *buf = NULL; |
| | | |
| | | int recv_size; |
| | | |
| | | static size_t max_buf = 1024; |
| | | if(buf == NULL) { |
| | | buf = malloc(max_buf); |
| | | if(buf == NULL) { |
| | |
| | | } |
| | | |
| | | |
| | | if ((n = rio_readnb(rio, &request_head, sizeof(net_mod_request_head_t))) != sizeof(net_mod_request_head_t)) |
| | | if (rio_readnb(rio, request_head_bs, NET_MODE_REQUEST_HEAD_LENGTH) != NET_MODE_REQUEST_HEAD_LENGTH) |
| | | { |
| | | return -1; |
| | | } |
| | | |
| | | request_head = NetModSocket::decode_request_head(request_head_bs); |
| | | |
| | | if(request_head.content_length > max_buf) { |
| | | buf = realloc(buf, request_head.content_length); |
| | |
| | | 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, NetModSocket::encode_response_head(response_head), NET_MODE_RESPONSE_HEAD_LENGTH); |
| | | Rio_writen(connfd, recv_buf, recv_size); |
| | | } |
| | | |