Hi,
I experience strange behaviour with libevent on Solaris in combination with
pipes.
Start the following program and then kill its child. The parent goes in an
endless loop instead of exiting.
When using socketpair() instead of pipe() everything works as expected.
Setting EVENT_NOEVPORT=y also makes it work.
Im using libevent-1.4.9-stable on Solaris 5.10
Jörg
/////////////////////////////////////////////////////
#include <event.h>
#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
static void eventCallback( int fd, short swhat, void* ud )
{
char buf[100];
size_t readn = read( fd, buf, sizeof(buf)-1 );
if( readn > 0 )
{
buf[readn] = 0;
printf( "%s\n", buf );
}
else
{
close( fd );
event_del( (struct event*)ud );
}
}
int main( int argc, char** argv )
{
int fd[2];
if( 0 )
socketpair( AF_UNIX, SOCK_STREAM, 0, fd ); // works
else
pipe( fd ); // fails
pid_t child = fork();
if( child == 0 )
{
close( fd[0] );
for(;;)
{
write( fd[1], "hello world", 11 );
sleep( 1 );
}
}
else
{
close( fd[1] );
event_init();
struct event ev;
event_set( &ev, fd[0], EV_READ | EV_PERSIST, eventCallback, &ev );
event_add( &ev, 0 );
event_dispatch();
printf( "it works!\n" );
}
}
/////////////////////////////////////////////////////
_______________________________________________
Libevent-users mailing list
[email protected]
http://monkeymail.org/mailman/listinfo/libevent-users