int main(int argc, char** argv) { xs_init(); char* p = xs_malloc(100); xs_fini(); return 0; }
void __xs_aio_recv_data(xs_ev_sock_t* sev) { xs_aio_t* aio = sev->arg; int ret; xs_logd("recv data sev->fd=%d, aio->iolen=%d, aio->buflen=%d", sev->fd, aio->iolen, aio->buflen); /* recv head */ if(aio->iolen < 4) { char* p = (char*)&aio->buflen; ret = read(sev->fd, p+aio->iolen, 4-aio->iolen); if(ret > 0) { aio->iolen += ret; if(aio->iolen < 4) { xs_ev_add(sev->ev); return; } else if(aio->iolen == 4) { aio->buflen = ntohl(aio->buflen); xs_logd("recv head buffer length = %d", aio->buflen); aio->buf = xs_malloc(aio->buflen + 1); aio->buf[aio->buflen] = 0; } } else if (ret < 0 && errno == EAGAIN) { xs_logd("add to ev poll"); xs_ev_add(sev->ev); return ; } else { xs_logd("here ret=%d", ret); aio->ret = ret; aio->func(aio); return; } } ret = read(sev->fd, aio->buf + (aio->iolen - 4), aio->buflen - (aio->iolen - 4)); if(ret > 0) { aio->iolen += ret; if(aio->iolen == aio->buflen + 4) { aio->result = XS_AIO_DONE; aio->ret = ret; xs_logd("************************callback ok fd=%d, aio->buf=%s, aio->buflen=%d", aio->fd, aio->buf, aio->buflen); aio->func(aio); } else { xs_logd("here"); xs_ev_add(sev->ev); } } else if(ret < 0 && errno == EAGAIN) { xs_logd("here"); xs_ev_add(sev->ev); } else { xs_logd("here ret=%d", ret); aio->ret = ret; aio->func(aio); } }