int swReactor_receive(swReactor *reactor, swDataHead *event) { swSendData data; int ret; ret = swRead(event->fd, data.data, SW_BUFFER_SIZE); printf("[ReadThread]recv: %s|fd=%d|ret=%d|errno=%d\n", data.data, event->fd, ret, errno); if (ret == 0) { //fd close event->type = SW_FD_CLOSE; return reactor->handle[SW_FD_CLOSE](reactor, event); } else if (ret > 0) { return reactor->handle[SW_FD_TCP](reactor, event); } else { swTrace("[swFactoryFunc_receive]epoll error\n"); reactor->handle[SW_FD_ERROR](reactor, event); return -1; } return 0; }
static int swServer_poll_onReceive(swReactor *reactor, swEvent *event) { int ret, n; swServer *serv = reactor->ptr; swFactory *factory = &(serv->factory); swEventData buf; bzero(buf.data, sizeof(buf.data)); ret = swRead(event->fd, buf.data, SW_BUFFER_SIZE); if (ret < 0) { //printf("error: %d\n", errno); return SW_ERR; } else if (ret == 0) { swTrace("Close Event.FD=%d|From=%d\n", event->fd, event->from_id); return swServer_close(serv, event); } else { buf.fd = event->fd; buf.len = ret; buf.from_id = event->from_id; //swTrace("recv: %s|fd=%d|ret=%d|errno=%d\n", buf.data, event->fd, ret, errno); n = factory->dispatch(factory, &buf); } return SW_OK; }
static int swServer_poll_onReceive2(swReactor *reactor, swEvent *event) { int ret; swServer *serv = reactor->ptr; swFactory *factory = &(serv->factory); swEventData *buf = sw_malloc(sizeof(swEventData)); if(buf==NULL) { swTrace("Malloc fail\n"); return SW_ERR; } bzero(buf->data, sizeof(buf->data)); ret = swRead(event->fd, buf->data, SW_BUFFER_SIZE); if (ret < 0) { swTrace("Receive Error.Fd=%d.From=%d\n", event->fd, event->from_id); return SW_ERR; } else if (ret == 0) { swTrace("Close Event.FD=%d|From=%d\n", event->fd, event->from_id); sw_free(buf); return swServer_close(serv, event); } else { buf->fd = event->fd; buf->len = ret; buf->from_id = event->from_id; //swTrace("recv: %s|fd=%d|ret=%d|errno=%d\n", buf->data, event->fd, ret, errno); factory->dispatch(factory, buf); } return SW_OK; }
int swReactor_receive(swReactor *reactor, swEvent *event) { swEventData data; return swRead(event->fd, data.data, SW_BUFFER_SIZE); }