понедельник, 21 сентября 2009 г.

Обуздал kqueue :)



int _init ( )
{
_open ( );

if ( ( _kq = kqueue ( ) ) == -1 )
{
printf ( "C'ant kreate kqueue ......\n" );
_close ( );
return -1;
}

printf ( "Kqueue created !\n" );


EV_SET( &_ke, _port, EVFILT_READ, EV_ADD | EV_ENABLE | EV_CLEAR , NOTE_WRITE, 0, 0);

if ( kevent( _kq, &_ke, 1, NULL, 0, NULL) == -1 )
{
printf ( "C'ant register kevent ......\n" );
_close ( );
return -2;
}




return rv;
}


int _readDelayed ( char * buf, int len, timeval timeoutv )
{


timespec timeout = { tv_sec, tv_usec };

bzero ( &_ke, sizeof ( _ke ) );

int rez = kevent ( _kq, NULL, 0, &_ke, 1, &timeout );
if ( rez <= 0 ) return -3;

for ( int n = 0 ; n < rez; n++ )
{
if ( _ke.flags & EV_ERROR )
{
printf ( "error in event......\n" );
return -1;
}
if ( _ke.filter == EVFILT_READ )
{
int rcv = _read ( buf, len );
return rcv;
}
else
{
printf ( "strange behavior ......\n" );

}
}

return -1;
}


Комментариев нет:

Отправить комментарий