int fdev_new(struct fdev *ev, int fd, uint16_t flags, evloop_cb_t cb, void *arg) { ev->fd = fd; ev->cb = cb; ev->arg = arg; ev->flags = 0; ev->rdidx = -1; ev->wridx = -1; return fdev_enable(ev, flags); }
int fdev_new(int epfd,struct fdev *ev, int fd, uint16_t flags, evloop_cb_t cb, void *arg) { ev->epfd = epfd; ev->fd = fd; ev->cb = cb; ev->arg = arg; ev->flags = 0; ev->index = -1; return fdev_enable(ev, flags); }
int nc_sendmsg(net_client_t *nc,void *msg,uint32_t len) { int rv; struct cpeer *p = nc->peer; struct msg_t *message = NULL; thread_mutex_lock(nc->peer_mutex); if(!p || p->status == CPEER_DISCONNECTED) { thread_mutex_unlock(nc->peer_mutex); return -1; } __sync_fetch_and_add(&p->refcount,1); thread_mutex_unlock(nc->peer_mutex); message = (struct msg_t *)mmalloc(p->allocator, sizeof(struct msg_t)); message->buf = (uint8_t *)mmalloc(p->allocator,len); bcopy((char *)msg,message->buf,len); message->len = len; message->peer_id = p->id; thread_mutex_lock(p->sq_mutex); BTPDQ_INSERT_TAIL(&p->send_queue, message, msg_entry); rv = fdev_enable(&p->ioev,EV_WRITE); thread_mutex_unlock(p->sq_mutex); if(rv != 0) { log_error(nc->log,"nc_sendmsg fdev_enable EV_WRITE failed!"); __sync_fetch_and_sub(&p->refcount,1); cpeer_kill(p); return -1; } else { __sync_fetch_and_sub(&p->refcount,1); return 0; } }