// socket_stream.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "lib_acl.h"
#include "acl_cpp/stdlib/string.hpp"
#include "acl_cpp/stream/socket_stream.hpp"

//using acl;

int main(int argc, char* argv[])
{
	(void) argc;
	(void) argv;

	acl::acl_cpp_init();
	const char* local_addr = "127.0.0.1:8088";
	acl::server_socket server(acl::OPEN_FLAG_EXCLUSIVE, 128);
	if (server.open(local_addr) == false) {
		printf("listen %s error %s\r\n", local_addr, acl::last_serror());
		return 1;
	}
	printf("listen %s ok\r\n", local_addr);

	acl::socket_stream client;
	acl::string addr = "mail.51iker.com:80";
	acl::string request = "GET / HTTP/1.1\r\n"
		"HOST: mail.51iker.com\r\n"
		"Connection: close\r\n\r\n";
	acl::string respond;

	acl::acl_cpp_init();

	if (client.open(addr, 0, 0) == false) {
		printf("connect %s error(%s)\n", addr.c_str(), acl_last_serror());
		printf("input any key to exit\n");
		getchar();
		return (0);
	}

	if (client.write(request) == -1) {
		printf("write %s to %s error(%s)\n", request.c_str(), addr.c_str(),
			acl_last_serror());
		printf("input any key to exit\n");
		getchar();
	}
	printf("%s", request.c_str());

	while (1) {
		if (client.read(respond, false) == false)
			break;
		printf("%s", respond.c_str());
	}

	printf("ok, enter any key to exit\n");
	getchar();
	return 0;
}
