#include <Core/Core.h>

using namespace Upp;

void LogError(const char* aMsg, int aErrorCode)
{
	char error_msg[64];
	char *p = error_msg;

#ifdef PLATFORM_POSIX
	if ((p = strerror_r(aErrorCode, error_msg, sizeof(error_msg))) != 0 )
#else
	if ( strerror_s(error_msg, sizeof(error_msg), aErrorCode) != 0 )
#endif
	{
		LOG(Format("%s: %d %s", aMsg, aErrorCode, p));
	}
}

void LogError(const char* aMsg)
{
#ifdef PLATFORM_POSIX
	LogError(aMsg, errno);
#else
	LogError(aMsg, WSAGetLastError());
#endif
}

bool Connect1(TcpSocket &sock)
{
	if(sock.Connect("127.0.0.1", 12345))
	{
		LogError("After Connect");
		return true;
	}
	return false;
}

bool Connect2(TcpSocket &sock)
{
	if (sock.Connect("127.0.0.1", 12345) && sock.WaitWrite())
	{
		LogError("After WaitWrite");
		int optval = 0;
		socklen_t optlen = sizeof(optval);
		if (getsockopt(sock.GetSOCKET(), SOL_SOCKET, SO_ERROR, (char*)&optval, &optlen) == 0)
		{
			if (optval == 0)
				return true;
			LogError("optval", optval);
		}
		else
		{
			LogError("getsockopt error");
		}
	}
	return false;
}


CONSOLE_APP_MAIN
{
	TcpSocket client_socket;
	String txt = "My Test String";

	client_socket.Timeout(5000);
	client_socket.GlobalTimeout(5000);

	LOG("Test1 Connecting");
	if (Connect1(client_socket))
	{
		LOG("Connected");
		LOG("Sending: " << txt);
		if (client_socket.PutAll(txt))
			LogError("SUCCESS, you must have a server on port 12345");
		else
			LogError("ERROR");
	}
	else
		LOG("SUCCESS: No Connection to non existing server.");
	
	LOG("\nTest2 Connecting");
	if (Connect2(client_socket))
	{
		LOG("Connected");
		LOG("Sending: " << txt);
		if (client_socket.PutAll(txt))
			LogError("SUCCESS, you must have a server on port 12345");
		else
			LogError("ERROR");
	}
	else
		LOG("SUCCESS: No Connection to non existing server.");
}
