IO-SocketAlarm
view release on metacpan or search on metacpan
SocketAlarm_util.c view on Meta::CPAN
int snprint_sockaddr(char *buffer, size_t buflen, struct sockaddr *addr) {
char tmp[256];
int port;
if (addr->sa_family == AF_INET) {
if (!inet_ntop(addr->sa_family, &((struct sockaddr_in*)addr)->sin_addr, tmp, sizeof(tmp)))
snprintf(tmp, sizeof(tmp), "(invalid?)");
port= ntohs(((struct sockaddr_in*)addr)->sin_port);
return snprintf(buffer, buflen, "inet %s:%d", tmp, port);
}
#ifdef AF_INET6
else if (addr->sa_family == AF_INET6) {
if (!inet_ntop(addr->sa_family, &((struct sockaddr_in6*)addr)->sin6_addr, tmp, sizeof(tmp)))
snprintf(tmp, sizeof(tmp), "(invalid?)");
port= ntohs(((struct sockaddr_in6*)addr)->sin6_port);
return snprintf(buffer, buflen, "inet6 [%s]:%d", tmp, port);
}
#endif
#ifdef AF_UNIX
else if (addr->sa_family == AF_UNIX) {
return snprintf(buffer, buflen, "unix %s", ((struct sockaddr_un*)addr)->sun_path);
}
#endif
return snprintf(buffer, buflen, "(unsupported address family %d)", (int)addr->sa_family);
}
int parse_signal(SV *name_sv) {
char *name;
if (looks_like_number(name_sv))
return SvIV(name_sv);
name= SvPV_nolen(name_sv);
if (!strcmp(name, "SIGKILL")) return SIGKILL;
if (!strcmp(name, "SIGTERM")) return SIGTERM;
if (!strcmp(name, "SIGUSR1")) return SIGUSR1;
if (!strcmp(name, "SIGUSR2")) return SIGUSR2;
if (!strcmp(name, "SIGALRM")) return SIGALRM;
if (!strcmp(name, "SIGABRT")) return SIGABRT;
if (!strcmp(name, "SIGINT" )) return SIGINT;
if (!strcmp(name, "SIGHUP" )) return SIGHUP;
croak("Unimplemented signal name %s", name);
}
int fileno_from_sv(SV *sv) {
PerlIO *io;
GV *gv;
SV *rv;
if (!SvOK(sv)) // undef
return -1;
if (!SvROK(sv)) // scalar, is it only digits?
return looks_like_number(sv)? SvIV(sv) : -1;
// is it a globref?
rv= SvRV(sv);
if (SvTYPE(rv) == SVt_PVGV) {
io= IoIFP(GvIOp((GV*) rv));
return PerlIO_fileno(io);
}
return -1;
}
int snprint_fd_table(char *buf, size_t sizeof_buf, int max_fd) {
struct stat statbuf;
struct sockaddr_storage addr;
size_t len= 0;
int i, j, n_closed;
len= snprintf(buf, sizeof_buf, "File descriptors {\n");
for (i= 0; i < max_fd; i++) {
socklen_t addr_len= sizeof(addr);
char * bufpos= buf + len;
size_t avail= sizeof_buf > len? sizeof_buf - len : 0;
if (fstat(i, &statbuf) < 0) {
( run in 0.885 second using v1.01-cache-2.11-cpan-39bf76dae61 )