Reusing event connections

Marcus Clyne maccaday at gmail.com
Wed Oct 28 03:24:48 MSK 2009


Hi,

Is it possible to re-use connections/events created using 
ngx_get_connection and ngx_add_event()?

I've tried using them, using write() to trigger an event (outside the 
event loop in a different thread) and read() to read the data (in the 
event loop).  This works as expected for the first use, but subsequent 
uses cause Nginx to go into an infinite loop (I'm guessing it's causing 
the main event loop to trigger, but I've not checked).

It does work properly if I delete the event and connection on each 
request, but I'd like to reused the same connection / event to trigger 
events multiple times without creating a connection / event each time.  
Is this possible?  What do I need to do to get it to work?

Below is roughly the code I'm using:

// to setup the connection / event

int fd[2];

if (pipe (fd)) {
    return  NGX_ERROR;
}

c = ngx_get_connection (fd[0], log);

if (c == NULL) {

    close (fd[0]);
    close (fd[1]);
    return  NGX_ERROR;
}

c->data = data;     // some relevant data - read my_handler_func
c->read->handler = my_handler_func;

ngx_add_event (c->read, NGX_READ_EVENT, 0);



// to trigger the event

write (fd[1], " ", 1);



// inside my_handler_func

char buf[1];

read (fd[0], buf, 1);   // this prevents re-triggering the event in the 
event loop


Any suggestions would be gratefully received.

Thanks,

Marcus.





More information about the nginx mailing list