int mplsd_read(struct thread *thread) { int retval; struct ldp *ldp = ldp_get(); mpls_socket_handle socket; MPLS_ASSERT(thread); socket = THREAD_ARG(thread); socket->read = thread_add_read(master,mplsd_read,socket,socket->fd); if (!ldp) { return 0; } switch (socket->type) { case MPLS_SOCKET_TCP_DATA: { retval = ldp_event(ldp->h, socket, socket->extra, LDP_EVENT_TCP_DATA); break; } case MPLS_SOCKET_TCP_LISTEN: { retval = ldp_event(ldp->h, socket, socket->extra, LDP_EVENT_TCP_LISTEN); break; } case MPLS_SOCKET_UDP_DATA: { retval = ldp_event(ldp->h, socket, socket->extra, LDP_EVENT_UDP_DATA); break; } default: { assert(0); } } return 0; }
static void socket_read_handler(int fd, short event, void *arg) { struct mpls_socket *socket; socket = (struct mpls_socket *)arg; if(!socket) return; switch(socket->type) { case MPLS_SOCKET_TCP_DATA: ldp_event(ldp->config, socket, socket->extra, LDP_EVENT_TCP_DATA); break; case MPLS_SOCKET_TCP_LISTEN: ldp_event(ldp->config, socket, socket->extra, LDP_EVENT_TCP_LISTEN); break; case MPLS_SOCKET_UDP_DATA: ldp_event(ldp->config, socket, socket->extra, LDP_EVENT_UDP_DATA); break; default: MPLS_ASSERT(0); } }
int mplsd_write(struct thread *thread) { struct ldp *ldp = ldp_get(); int retval; mpls_socket_handle socket; MPLS_ASSERT(thread); socket = THREAD_ARG(thread); socket->write = thread_add_write(master,mplsd_write,socket,socket->fd); if (socket->type != MPLS_SOCKET_TCP_CONNECT) { assert(0); } retval = ldp_event(ldp->h, socket, socket->extra, LDP_EVENT_TCP_CONNECT); return 0; }