1
我在win32(msvc 9.0)下移植linux应用程序,并且在最终完成之后,我在socket()
这样的简单事情上遇到了非默认行为。如何通过MSVC上的套接字()创建套接字?
#include <winsock2.h>
#include <ws2tcpip.h>
int main(int argc, char **argv)
{
int subsock;
if ((subsock = socket(PF_INET, SOCK_STREAM, 0)) < 0) {
printf("Failed to open socket (ret value = %d)\n", subsock);
}
}
此打印Failed to open socket (ret value = -1)
每次。什么是错的,以及如何在win32上打开套接字?
谢谢,你真的帮了我这个! – DinGODzilla 2011-03-28 00:56:20
我假设编译代码到动态库时,WSAStartup()必须放在DllMain()中。那是对的吗? – DinGODzilla 2011-03-28 01:51:46
将代码放入DllMain是非常不安全的 - 特别是当它在另一个DLL中运行时。在你的代码中只需要一个帮助函数来跟踪WSAStartup是否被全局变量调用(如果需要的话调用WSAStartup)。在创建套接字或任何其他网络功能之前,请调用您的帮助函数。 – selbie 2011-03-28 02:16:54