Socket-Class
view release on metacpan or search on metacpan
xs/sc_const/Const.xs view on Meta::CPAN
{ "SC_STATE_CONNECTED", ITEM_LONG, (const char *) SC_STATE_CONNECTED },
{ "SC_STATE_SHUTDOWN", ITEM_LONG, (const char *) SC_STATE_SHUTDOWN },
{ "SC_STATE_CLOSED", ITEM_LONG, (const char *) SC_STATE_CLOSED },
{ "SC_STATE_ERROR", ITEM_LONG, (const char *) SC_STATE_ERROR },
{ "SD_RECEIVE", ITEM_LONG, (const char *) 0 },
{ "SD_SEND", ITEM_LONG, (const char *) 1 },
{ "SD_BOTH", ITEM_LONG, (const char *) 2 },
{ "SO_DEBUG", ITEM_LONG, (const char *) SO_DEBUG },
{ "SO_REUSEADDR", ITEM_LONG, (const char *) SO_REUSEADDR },
{ "SO_TYPE", ITEM_LONG, (const char *) SO_TYPE },
{ "SO_ERROR", ITEM_LONG, (const char *) SO_ERROR },
{ "SO_DONTROUTE", ITEM_LONG, (const char *) SO_DONTROUTE },
{ "SO_SNDBUF", ITEM_LONG, (const char *) SO_SNDBUF },
{ "SO_RCVBUF", ITEM_LONG, (const char *) SO_RCVBUF },
{ "SO_KEEPALIVE", ITEM_LONG, (const char *) SO_KEEPALIVE },
{ "SO_OOBINLINE", ITEM_LONG, (const char *) SO_OOBINLINE },
{ "SO_LINGER", ITEM_LONG, (const char *) SO_LINGER },
{ "SO_RCVLOWAT", ITEM_LONG, (const char *) SO_RCVLOWAT },
{ "SO_SNDLOWAT", ITEM_LONG, (const char *) SO_SNDLOWAT },
{ "SO_RCVTIMEO", ITEM_LONG, (const char *) SO_RCVTIMEO },
{ "SO_SNDTIMEO", ITEM_LONG, (const char *) SO_SNDTIMEO },
#if defined _WIN32 || defined __CYGWIN__
{ "SO_ACCEPTCON", ITEM_LONG, (const char *) 0x0002 },
#else
{ "SO_ACCEPTCON", ITEM_LONG, (const char *) 80 },
#endif
{ "SOCK_DGRAM", ITEM_LONG, (const char *) SOCK_DGRAM },
{ "SOCK_STREAM", ITEM_LONG, (const char *) SOCK_STREAM },
{ "SOL_SOCKET", ITEM_LONG, (const char *) SOL_SOCKET },
{ "SOL_IP", ITEM_LONG, (const char *) 0 },
{ "SOL_TCP", ITEM_LONG, (const char *) 6 },
{ "SOL_UDP", ITEM_LONG, (const char *) 17 },
{ "SOMAXCONN", ITEM_LONG, (const char *) SOMAXCONN },
{ "TCP_NODELAY", ITEM_LONG, (const char *) TCP_NODELAY },
{ "getaddrinfo", ITEM_CODE, "Socket::Class::getaddrinfo" },
{ "getnameinfo", ITEM_CODE, "Socket::Class::getnameinfo" },
};
const export_item_t *export_items_end =
export_items + (sizeof(export_items) / sizeof(export_item_t));
MODULE = Socket::Class::Const PACKAGE = Socket::Class::Const
BOOT:
{
sv_setpvn( get_sv( "Socket::Class::Const::VERSION", TRUE ), "bundled", 7 );
}
void
export( package, ... )
SV *package;
PREINIT:
int i, make_var;
char *str, *pkg, *tmp = NULL;
const char *s2;
STRLEN len, pkg_len;
HV *stash;
SV *sv;
const export_item_t *item;
PPCODE:
pkg = SvPV( package, pkg_len );
stash = gv_stashpvn( pkg, (I32) pkg_len, TRUE );
Newx( tmp, pkg_len + 3, char );
Copy( pkg, tmp, pkg_len, char );
tmp[pkg_len ++] = ':';
tmp[pkg_len ++] = ':';
for( i = 1; i < items; i ++ ) {
s2 = str = SvPV( ST(i), len );
switch( *str ) {
case ':':
if( strcmp( str, ":all" ) == 0 ) {
for( item = export_items; item < export_items_end; item ++ ) {
switch( item->type ) {
case ITEM_LONG:
newCONSTSUB( stash,
item->name, newSViv( (IV) item->w.value ) );
break;
case ITEM_CODE:
sv = (SV *) get_cv( item->w.function, 0 );
if( sv == NULL ) {
s2 = item->w.function;
goto not_found;
}
len = (STRLEN) strlen( item->name );
(void) hv_store( stash, item->name, (I32) len, sv, 0 );
break;
}
}
}
else {
Perl_croak( aTHX_ "Invalid export tag \"%s\"", str );
}
continue;
case '$':
str ++, len --;
make_var = 1;
break;
case '&':
str ++, len --;
default:
make_var = 0;
break;
}
for( item = export_items; item < export_items_end; item ++ ) {
if( item->name[0] < str[0] )
continue;
if( item->name[0] > str[0] )
goto not_found;
if( strcmp( item->name, str ) != 0 )
continue;
switch( item->type ) {
case ITEM_LONG:
if( make_var ) {
Renew( tmp, pkg_len + len + 1, char );
Copy( str, tmp + pkg_len, len + 1, char );
sv_setiv( get_sv( tmp, TRUE ), (IV) item->w.value );
}
else {
newCONSTSUB( stash, str, newSViv( (IV) item->w.value ) );
}
( run in 0.302 second using v1.01-cache-2.11-cpan-5511b514fd6 )