int conn = socket(.....); [...] ENTER; SAVETMPS; PUSHMARK(SP); XPUSHs(sv_2mortal(newSViv(conn))); PUTBACK; cpretval = call_sv(the_coderef, G_SCALAR|G_EVAL|G_KEEPERR); SPAGAIN; if(SvTRUE(ERRSV)) { STRLEN n_a; log_helper(1,kidno,SvPV(ERRSV, n_a)); POPs; real_retval = 0; } else { if(cpretval != 1) croak("Return count from coderef callback != 1"); real_retval = POPi; } PUTBACK; FREETMPS; LEAVE; #### sub the_callback_function { my ($conn) = @_; open(my $c,"+<&=$conn"); bless $c, 'IO::Socket::INET'; $c->autoflush(1); $c->send("Network data!\n"); ..... #### PerlIO* conn_pio; conn_pio = PerlIO_fdopen(conn,"r+");