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;
}
понедельник, 21 сентября 2009 г.
Обуздал kqueue :)
Подписаться на:
Комментарии к сообщению (Atom)
Комментариев нет:
Отправить комментарий