Libev, Как передать аргументы соответствующим обратным вызовам

Я попал в ситуацию передачи аргументов в libev.

Обычно libev получает пакеты в такой функции, как *receive_callback*, это нормально, но на практике нам нужно отправить относительный *write_callback*для обработки конкретных к полученному пакету. Например:

S_RECV_MSG* pstRecvMsg = (S_RECV_MSG*) recv_buff;
switch(pstRecvMsg->wMsgType) {
    case 1: 
        ev_io_init(w, write_callback1, w->fd, EV_WRITE);
        break;
    case 2:
        ev_io_init(w, write_callback2, w->fd, EV_WRITE);
        break;
    case 3:
        // .......
}

У меня вопрос: если write_callbackXтакже должен прочитать определенное содержимое в recv_buff, как мы можем передать аргумент recv_buff в callbackX? Должны ли мы нести здесь бремя и уродство глобальных переменных?

23
задан Tim Cooper 14 November 2013 в 01:51
поделиться