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 )