
|
[openbeosnetteam]
||
[Date Prev]
[04-2002 Date Index]
[Date Next]
||
[Thread Prev]
[04-2002 Thread Index]
[Thread Next]
[openbeosnetteam] Re: Ping & timers...
- From: philippe.houdoin@xxxxxxx
- To: openbeosnetteam@xxxxxxxxxxxxx
- Date: Tue, 02 Apr 2002 16:04:54 +0200 (MEST)
> Any progress on how we use the variables passed into select yet?
Oh, sorry for not answering this point more quicker.
Yes, the solution is to call the BeOS kernel notify_select_event(),
with the corresponding selectsync and ref.
Those are the ones passed by kernel to /dev/net/socket
net_socket_[de]select() hooks.
I should have commit this fix long ago already, but can't find
both time and where I could store the selectsync / ref for each
select event (read, write, exception).
The best way /me think is to add:
struct {
selectsync * sync;
uint32 ref;
} selectinfo[3];
in struct socket definition.
But this imply that socket structure will be no more an opaque thing
for the socket driver, which is bad (tm).
Anyway, in driver/socket.c:
static status_t net_socket_select
(
void * cookie,
uint8 event,
uint32 ref,
selectsync * sync
)
{
struct socket * so = (struct socket *) cookie;
so->selectinfo[event].sync = sync;
so->selectinfo[event].ref = ref;
return B_OK;
}
static status_t net_socket_deselect
(
void * cookie,
uint8 event,
selectsync * sync
)
{
struct socket * so = (struct socket *) cookie;
so->selectinfo[event].sync = NULL;
so->selectinfo[event].ref = 0;
return B_OK;
}
And, last but not least, *somewhere*, you will need to
call notify_select_event() when a select event raise on the socket:
// these are missing from KernelExport.h ...
#define B_SELECT_READ 1
#define B_SELECT_WRITE 2
#define B_SELECT_EXCEPTION 3
extern void notify_select_event(selectsync *sync, uint32 ref);
if (so->selectinfo[event].sync)
notify_select_event(so->selectinfo[event].sync,
so->selectinfo[event].ref);
Problem is "where"?
I must confess I'm lost in the current higher level of socket layer.
Should the notify take place in sowakeup()?
Who wait on the read/write sockbuf sb_pop semaphore?
Is there is already some "exception" handling somewhere, where
a B_SELECT_EXCEPTION should be notified too?
-Philippe, lost in no_more_than_six_letters_struct_fields_names land ;-)
|

|