GitOid Server::recvOid() { static unsigned char oid_raw[GIT_OID_RAWSZ]; recvFromClient(oid_raw, GIT_OID_RAWSZ); GitOid oid; oid.setOidRaw(oid_raw); return oid; }
std::vector<int> Server::recvLongVector() { uint32_t count = recvLong(); uint32_t *arr = new uint32_t[(size_t)count]; recvFromClient(arr, count * 4); std::vector<int> res; for (size_t i = 0; i < count; ++i) { res.push_back((int)ntohl(arr[i])); } delete [] arr; return res; }
void do_read(int epollfd,int fd,char *buf) { int nread; int size; nread = read(fd,&size,4); if (nread == -1) { perror("read error:"); close(fd); delete_event(epollfd,fd,EPOLLIN); } else if (nread == 0) { fprintf(stderr,"client close.\n"); close(fd); delete_event(epollfd,fd,EPOLLIN); } else { recvFromClient(fd,size); //修改描述符对应的事件,由读改为写 modify_event(epollfd,fd,EPOLLOUT); } }
uint32_t Server::recvLong() { uint32_t res; recvFromClient(&res, 4); return ntohl(res); }