Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 13 May 2010 19:01:20 +0400
From:      Dmitry Krivenok <krivenok.dmitry@gmail.com>
To:        freebsd-hackers@freebsd.org
Subject:   Need advice about selsocket analogue for a set of sockets
Message-ID:  <AANLkTikBmiPzN0qGbSiMVQU1LcLnuTIjZUJts_WsnLyS@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
Hi Hackers,

I know that FreeBSD-8 kernel provides selsocket function declared as follows:

int selsocket(struct socket *so, int events, struct timeval *tvp,
struct thread *td);

It's very useful if you have just one socket and don't care about
which events fired.
In my case, however, I have an array of the following structures

typedef struct {
    struct socket *fd;
    int events;
    int revents;
} sock_poll_t;

and need to poll all sockets saving results in revents field.
That is I need to implement a function with the following prototype:

int sockets_poll( sock_poll_t * ufds,  unsigned int nfds,  int timeout_msecs);

Obviously, selsocket is useless is such scenario (it returns 0 on
success and therefore
doesn't tell which events fired).

I looked into sys/kern/sys_generic.c but didn't find any functions
which may be useful
for working with array of structures above.

I could try to implement a function similar to selsocket, but I cannot
use the same helper
functions (selfdalloc, seltdwait, etc) because they are considered as
implementation details
and defined as static.

I need your advice.
What's the best way of solving my problem?

Thanks in advance!

--
Sincerely yours, Dmitry V. Krivenok
e-mail: krivenok.dmitry@gmail.com
skype: krivenok_dmitry
jabber: krivenok_dmitry@jabber.ru
icq: 242-526-443



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?AANLkTikBmiPzN0qGbSiMVQU1LcLnuTIjZUJts_WsnLyS>