Commit Diff


commit - 44a85ec4df644043ad17162130c1cdda45f655dc
commit + 718ba070f68cb1ae4db463b489cff7edfe75526f
blob - 896efcc255f2bc838311a4dc59115f6522b86efc
blob + 37902a1dabbdc48ef964d668ca1a648b1fe3054f
--- shinsha.ha
+++ shinsha.ha
@@ -3,8 +3,8 @@ use fmt;
 use getopt;
 use io;
 use log;
+use net::dial;
 use net::ip;
-use net::tcp;
 use net;
 use os;
 use unix::signal;
@@ -68,18 +68,25 @@ export fn main() void = {
 
 	log::printfln("should use debug {} and verbose {}", debug, verbose);
 
-	// TODO: would be nice to do http::listen("localhost:9090")!;
-	const port = 9090u16;
-	const sock = match (tcp::listen(ip::LOCAL_V4, port, tcp::reuseaddr)) {
-	case let sock: net::socket =>
-		yield sock;
-	case let err: net::error =>
-		log::fatalf("failed to listen on {}: {}", port,
-			net::strerror(err));
+	const addr = "localhost";
+	const port = "9090";
+
+	let (ips, port) = match(dial::resolve("tcp", addr, port)) {
+	case let err: net::dial::error =>
+		log::fatal("failed to resolve {}:{}: {}", addr, port,
+			dial::strerror(err));
+	case let pair: ([]ip::addr, u16) =>
+		yield pair;
 	};
-	defer net::close(sock)!;
 
-	http::listen_sock(sock, null);
+	for (let i = 0z; i < len(ips); i += 1) {
+		match (http::listen(ips[i], port, null)) {
+		case let err: net::error =>
+			log::fatal("failed to listen to {}:{}: {}",
+				ip::string(ips[i]), port, net::strerror(err));
+		case => yield;
+		};
+	};
 
 	http::handle("/", &homepage);
 	http::handle("/2", &page2);
@@ -87,7 +94,7 @@ export fn main() void = {
 	ev::signal(signal::sig::INT, &sighandler, null)!;
 	ev::signal(signal::sig::TERM, &sighandler, null)!;
 
-	log::printfln("listening on port {}", port);
+	log::printfln("listening on {}:{}", addr, port);
 	match (ev::mainloop()) {
 	case void => yield;
 	case let err: errors::error =>