IO-SocketAlarm
view release on metacpan or search on metacpan
SocketAlarm.xs view on Meta::CPAN
SV *sock_sv
SV *eventmask_sv
SV *actions_sv
INIT:
int sock_fd= fileno_from_sv(sock_sv);
int eventmask= EVENT_DEFAULTS;
struct stat statbuf;
struct socketalarm *sa;
SV **action_list= NULL;
SSize_t n_actions= 0;
PPCODE:
if (!sv_isobject(self))
croak("Not an object");
if ((sa= get_magic_socketalarm(self, 0)))
croak("Already initialized");
if (!(sock_fd >= 0 && fstat(sock_fd, &statbuf) == 0 && S_ISSOCK(statbuf.st_mode)))
croak("Not an open socket");
if (eventmask_sv && SvOK(eventmask_sv))
eventmask= SvIV(eventmask_sv);
if (actions_sv && SvOK(actions_sv)) {
action_list= unwrap_array(actions_sv, &n_actions);
SocketAlarm.xs view on Meta::CPAN
events(alarm)
struct socketalarm *alarm
CODE:
RETVAL= alarm->event_mask;
OUTPUT:
RETVAL
void
actions(alarm)
struct socketalarm *alarm
PPCODE:
if (!alarm->actions_av);
socketalarm__build_actions(alarm);
ST(0)= sv_2mortal(newRV_inc((SV*) alarm->actions_av));
XSRETURN(1);
int
action_count(alarm)
struct socketalarm *alarm
CODE:
RETVAL= alarm->action_count;
SocketAlarm.xs view on Meta::CPAN
snprint_action(buf, sizeof(buf), alarm->actions+i);
sv_catpvf(out, "%4d: %s\n", (int)i, buf);
}
SvREFCNT_inc(out);
RETVAL= out;
OUTPUT:
RETVAL
void
_terminate_all()
PPCODE:
shutdown_watch_thread();
MODULE = IO::SocketAlarm PACKAGE = IO::SocketAlarm::Util
struct socketalarm *
socketalarm(sock_sv, ...)
SV *sock_sv
INIT:
int sock_fd= fileno_from_sv(sock_sv);
int eventmask= EVENT_DEFAULTS;
SocketAlarm.xs view on Meta::CPAN
# descriptor to verify the statuses for sockets in various states.
void
_poll(fd, events, timeout)
int fd
SV *events;
int timeout;
INIT:
int ret;
struct pollfd pollbuf;
PPCODE:
pollbuf.fd= fd;
pollbuf.events= SvIV(events);
pollbuf.revents= 0;
ret= poll(&pollbuf, 1, timeout);
EXTEND(SP, 2);
PUSHs(sv_2mortal(newSViv(ret)));
PUSHs(sv_2mortal(newSViv(ret < 0? errno : ret > 0? pollbuf.revents : 0)));
#-----------------------------------------------------------------------------
# Constants
( run in 0.611 second using v1.01-cache-2.11-cpan-5511b514fd6 )