コード例 #1
0
ファイル: kqueue.c プロジェクト: AchillesA/btpd
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);
}
コード例 #2
0
ファイル: epoll.c プロジェクト: zhoubug/znet
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);
}
コード例 #3
0
ファイル: znet_client.c プロジェクト: zhoubug/znet
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;
	}
}