/* * scamper_fd_private * * allocate a private fd for scamper to manage. this fd is not shared amongst * scamper. */ scamper_fd_t *scamper_fd_private(int fd, scamper_fd_cb_t read_cb, void *read_param, scamper_fd_cb_t write_cb, void *write_param) { scamper_fd_t *fdn = NULL; if((fdn = fd_alloc(SCAMPER_FD_TYPE_PRIVATE, fd)) == NULL) { goto err; } if((fdn->fd_list_node = dlist_tail_push(fd_list, fdn)) == NULL) goto err; if(read_cb != NULL) { scamper_fd_read_set(fdn, read_cb, read_param); scamper_fd_read_unpause(fdn); } if(write_cb != NULL) { scamper_fd_write_set(fdn, write_cb, write_param); scamper_fd_write_unpause(fdn); } return fdn; err: if(fdn != NULL) fd_free(fdn); return NULL; }
void scamper_writebuf_attach(scamper_writebuf_t *wb, scamper_fd_t *fdn, void *param, void (*efunc)(void *, int, scamper_writebuf_t *), void (*dfunc)(void *, scamper_writebuf_t *)) { wb->fdn = fdn; wb->param = param; wb->efunc = efunc; wb->dfunc = dfunc; scamper_fd_write_set(fdn, writebuf_callback, wb); return; }