Custom file descriptor handler

Marat Dakota dakota at
Mon Feb 9 01:18:58 UTC 2015

Here's what I've come up with:

// In upper scope.
ngx_connection_t myConn;
ngx_event_t myConnRev;

static ngx_int_t
my_module_init(ngx_cycle_t *cycle) {
    int myFd;
    ... // Initialize myFd.

    memset(&myConn, 0, sizeof(myConn));
    memset(&myConnRev, 0, sizeof(myConnRev));

    myConn.number = ngx_atomic_fetch_add(ngx_connection_counter, 1);
    myConn.fd = myFd;
    myConn.pool = cycle->pool;
    myConn.log = cycle->log; = &myConnRev; = &myConn;
    myConnRev.ready = 1; = 1;
    myConnRev.instance = 1;
    myConnRev.handler = myReadCallback;
    myConnRev.log = cycle->log;

    ngx_add_event(&myConnRev, NGX_READ_EVENT, 0);

It looks like working on OSX, I had no chance to test it on other
platforms, but there are a couple of questions.

Is it enough, should it be stable? And I also have no actual idea what
`ready`, `active` and `instance` flags actually mean. Do I need to
`ngx_atomic_fetch_add(ngx_connection_counter, 1);` my connection number? Is
it ok to leave write event field blank (I will only read from the
descriptor)? Do I need to fill some other fields?

The idea is that the file descriptor is initialized once the module is
initialized and lives for as long as worker process does.



On Sun, Feb 8, 2015 at 7:17 AM, Marat Dakota <dakota at> wrote:

> Hi,
> I have a file descriptor (it is created by other software, not by nginx).
> How to add it to nginx event loop watcher properly? All I need is to have
> my callback called when my file descriptor has a new data to read (I'll
> read the data by myself).
> Browsing the code shows functions like ngx_add_conn and ngx_add_event, but
> it seems like a non-trivial thing to prepare the proper input arguments.
> Thanks!
> --
> Marat
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the nginx-devel mailing list