Exemple #1
0
/* succ [, errmsg] = socket:connect(host, port) */
static int str_connect (lua_State *L) {
	loski_NetDriver *drv = (loski_NetDriver *)lua_touserdata(L, lua_upvalueindex(1));
	loski_Socket *socket = tosock(L, LOSKI_STRMSOCKET);
	loski_Address address;
	int res = checkaddress(drv, L, 2, 3, &address);
	if (res != 0) return pushaddrres(L, 0, res);
	res = loski_connectsocket(drv, socket, &address);
	return pushsockres(L, 0, res);
}
Exemple #2
0
/* sent [, errmsg] = socket:send(data [, i [, j [, host, port]]]) */
static int dgm_send (lua_State *L) {
	loski_NetDriver *drv = (loski_NetDriver *)lua_touserdata(L, lua_upvalueindex(1));
	loski_Socket *socket = tosock(L, LOSKI_DGRMSOCKET);
	size_t sz, sent;
	const char *data = checkstream(L, 2, 3, 4, &sz);
	int res;
	if (!lua_isnoneornil(L, 5)) {
		loski_Address address;
		res = checkaddress(drv, L, 5, 6, &address);
		if (res != 0) return pushaddrres(L, 0, res);
		res = loski_sendtosocket(drv, socket, data, sz, &sent, &address);
	} else {
		res = loski_sendtosocket(drv, socket, data, sz, &sent, NULL);
	}
	lua_pushinteger(L, sent);
	return pushsockres(L, 1, res);
}
Exemple #3
0
void
threadmain(int argc, char *argv[])
{
	int serveudp, servetcp;
	char *service;

	serveudp = 0;
	servetcp = 0;
	service = "dns";
	ARGBEGIN{
	case 'd':
		debug = 1;
		traceactivity = 1;
		break;
	case 'f':
		dbfile = EARGF(usage());
		break;
	case 'x':
		service = EARGF(usage());
		break;
	case 'r':
		resolver = 1;
		break;
	case 's':
		serveudp = 1;
		cachedb = 1;
		break;
	case 't':
		servetcp = 1;
		cachedb = 1;
		break;
	case 'a':
		maxage = atoi(EARGF(usage()));
		break;
	case 'z':
		zonerefreshprogram = EARGF(usage());
		break;
	case 'n':
		sendnotifies = 1;
		break;
	case 'U':
		udpaddr = estrdup(netmkaddr(EARGF(usage()), "udp", "domain"));
		break;
	case 'T':
		tcpaddr = estrdup(netmkaddr(EARGF(usage()), "tcp", "domain"));
		break;
	default:
		usage();
	}ARGEND
	
	if(argc)
		usage();
	if(serveudp && servetcp)
		checkaddress();

	rfork(RFNOTEG);

	/* start syslog before we fork */
	fmtinstall('F', fcallfmt);
	dninit();
	if(myipaddr(ipaddr, mntpt) < 0)
		sysfatal("can't read my ip address");

	syslog(0, logfile, "starting dns on %I", ipaddr);

	opendatabase();

	mountinit(service);

	now = time(0);
	srand(now*getpid());
	db2cache(1);

	if(serveudp)
		proccreate(dnudpserver, nil, STACK);
	if(servetcp)
		proccreate(dntcpserver, nil, STACK);
	if(sendnotifies)
		proccreate(notifyproc, nil, STACK);

	io();
}