socket error 10093的问题
我按照ace程序员指南P99页上的最简单的例子照抄,发现个问题.请大家帮忙回答下.程序片段如下:
int _tmain(int argc, _TCHAR* argv[])
{
ACE_INET_Addr srvr(80,"192.168.1.119");
ACE_SOCK_Connector connector;
ACE_SOCK_Stream peer;
int ret = connector.connect(peer,srvr);
std::ACE_OS::last_error();
.....................
}
这样写的话就会有10093的错误
如果把int _tmain(int argc, _TCHAR* argv[])改成int ACE_TMAIN(int,ACE_TCHAR*) 就没有10093的错误了,
也就是说这样定义的时候会自动加入初始化socket库的代码,这是为什么? 10093: Either the application has not called WSAStartup, or WSAStartup failed.
ACE_TMAIN - > 内部自动的调用了WSAStartup. ACE_TMAIN应该只是一个为了兼容宽字符的宏定义吧。如果说ACE调用了WSAStartup 那么是什么时候呢?我还发现如果不用 ACE_TMAIN定义main函数,如果是了ACE:init()也可以初始化socket库存。请指教,平时我们做的时候到底应该如何做,最好能把原理也说下。
谢谢 ACE_TMAIN里面调用了初始化ACE:init。
单独调用ACE:init也行 在windows下使用socket需要调用WSAStartup,而ACE::init中为我们做了这个工作,要能正确使用,我们可以自己调用ACE::init,也可以使用ACE_TMAIN(它为我们做了ACE::init的工作和ACE::fini的工作,前一个函数是ACE做初始化工作,包括WSAStartup,初始化全局对象管理器等,后一个是在程序退出时做回收工作,回收全局对象管理器,调用WSACleanup),所以如果你的程序是Console的话,建议直接使用ACE_TMAIN,但是如果是GUI的,那就要自己做这个工作了。
页:
[1]