Articles of winsock

BSD套接字兼容包装winsock?

我试图将一个Linux应用程序移植到Windows。 该应用程序不是太复杂,使用所有相当标准的代码,很less有外部依赖。 主要的依赖是libelf(在mingw下编译得很好),pthreads(似乎有一个win32版本可用)和套接字。 主要的问题是套接字… Windows提供了WinSock,但是这与所有* nixes使用的BSD(Berkeley)套接字不是100%兼容的。 我想知道的是,是否有人在windows上公开了一个封装器来暴露一个BSD套接字API,但在后端调用Winsock,以便于移植?

准确设置winsockselect超时

我试图让我的接受呼叫在特定的时间段后超时,我试着在这里的build议: Winsock接受超时 在这种情况下,我传递一个TIMEVAL结构来select当我打电话时,问题是当我设置tv.tv_usec约40分钟左右,select呼叫立即超时,而不是等待我指定的40分钟。 MSDN指出,select的超时是它将等待的最长时间,我该如何使select或receive在这个超时之前等待特定的时间? #define WIN32_LEAN_AND_MEAN #include <Windows.h> #include <WinSock2.h> #include <Ws2tcpip.h> #include <cstdio> #include <tchar.h> VOID _tmain( int argc, TCHAR *argv[] ) { WSADATA wsaData = { 0 }; ADDRINFOA hINTs = { 0 }; PADDRINFOA pResult = NULL; SOCKET hServerSocket = INVALID_SOCKET, hClientSocket = INVALID_SOCKET; TIMEVAL tv = { 0 }; INT iReturnStatus […]

Winsock2.h vs winsock2.h和wsock32.lib vs ws2_32.lib

我对关于winsock的一些事情感到困惑。 首先,包括Winsock2.h vs winsock2.h('w'的上限) 其次,将wsock32.lib与ws2_32.lib链接起来有什么区别? 我已经尝试了几个组合,并导致编译时错误。 任何人都可以解释我使用什么逻辑推理? 谢谢Nick

Winsock重新定义错误

我正在编译Visual C ++ 2010中的一个项目,但是我有一些Winsock重新定义的问题。 首先我得到: syntax error : identifier 'SOCKADDR_STORAGE' 但是,如果我包括winsock或winsock2或ws2tcpip我会得到许多像这样的错误: error C2011: 'sockaddr' : 'struct' type redefinition error C2011: 'WSAData' : 'struct' type redefinition error C2011: 'linger' : 'struct' type redefinition

将进程的IOredirect到Windows套接字

我是新的winsock,我试图写一个服务器套接字,接受新的连接,然后它调用一个外部的可执行文件。 我们如何将外部可执行文件的stdin和stdoutredirect到已被接受的客户端套接字。 我GOOGLE了,发现下面的代码,但它不工作。 新进程已成功创build,但客户端无法从新进程接收任何数据。 我正在使用Windows 7和Visual Studio 2008 Express版本。 任何帮助和意见表示赞赏。 非常感谢! 服务器 #include <winsock2.h> #include <ws2tcpip.h> #include <stdio.h> #pragma comment(lib, "Ws2_32.lib") #define DEFAULT_PORT "27015" #define DEFAULT_BUFLEN 512 int _tmain(int argc, _TCHAR* argv[]) { WSADATA wsaData; int iResult; // Initialize Winsock iResult = WSAStartup(MAKEWORD(2,2), &wsaData); struct addrinfo *result = NULL, *ptr = NULL, hints; ZeroMemory(&hints, sizeof […]

WinSock recv()超时:setsockopt() – 设置值+半秒?

我正在编写一个跨平台的库,其中提供了一个套接字接口,在运行我的unit testing套件时,我注意到了一些有关通过setsockopt()设置的超时的奇怪:在Windows上,阻塞recv()调用似乎一直返回大约半秒(500毫秒)比通过SO_RCVTIMEO选项指定晚。 在我错过的文档中是否有任何解释? 在网上search的时候,我只能find另外一个关于这个问题的参考资料 – Bob Quinn和Dave Shute所拥有的“Windows Sockets Network Programming”中的某个人是否可以为我查找第466页? 不幸的是,我现在只能运行我的testingWindows Server 2008 R2,其他Windows版本上是否也存在相同的奇怪行为?

确保UDP中的数据包顺序

即时通讯使用2台计算机与应用程序发送和接收udp数据报。 没有stream量控制(ICMP禁用) 经常当我通过应用程序发送一个文件作为UDP数据报,我得到2个数据包改变他们的顺序,因此 – packetloss。 有没有办法确保winsock和send()会以相同的方式发送数据包? 或者是操作系统这样做? 被禁用和种类的防火墙,计算机之间没有连接硬件开关(它们是直接连接的)。 networking设备configuration需要? 谢谢

Winsock返回10061仅连接到本地主机

我不明白发生了什么事。 如果我创build一个套接字到localhost以外的地方(“localhost”,“127.0.0.1”或机器的外部ip),它可以正常工作。 如果我创build一个套接字到一个地址没有听到的端口,我会得到一个10060(超时),而不是10061是有道理的。 为什么当我到本地主机时,连接被拒绝? 我试图禁用防火墙,以防万一它搞砸了,但事实并非如此 在此之前,我正在做所有的WSA初始化工作。 _socketToServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if(_socketToServer == -1){ return false; } p_int = (int*)malloc(sizeof(int)); *p_int = 1; if( (setsockopt(_socketToServer, SOL_SOCKET, SO_REUSEADDR, (char*)p_int, sizeof(int)) == -1 )|| (setsockopt(_socketToServer, SOL_SOCKET, SO_KEEPALIVE, (char*)p_int, sizeof(int)) == -1 ) ){ free(p_int); return false; } free(p_int); struct sockaddr_in my_addr; my_addr.sin_family = AF_INET ; my_addr.sin_port = […]

XP和Vista之间使用winsock API差异的UDP多播

这似乎是build立一个UDP多播套接字所需的实现已经改变之间的Windows XP和Windows Vista。 特别: 在Windows XP下, 必须先调用bind()然后才能引用任何特定于多播的套接字选项。 但是,在Windows Vista下,在处理多播套接字时, 不能调用bind() 。 失败这两个点中的任何一个都会导致运行时发生套接字错误。 我疯了,还是有其他人看到这个呢? 有没有比条件编译的bind()调用更好的解决scheme?

为什么Windows不允许在模仿其他用户时启动WinSock

如果使用CreateProcessWithLogonW或CreateProcessAsUserW创build进程,则使用我自己的程序或其他程序调用winsock时不能运行。 它在创build套接字时返回这个错误: WSAEPROVIDERFAILEDINIT 10106 服务提供商未能初始化。 The requested service provider could not be loaded or initialized. 如果服务提供者的DLL无法加载(LoadLibrary失败)或提供者的WSPStartup或NSPStartup函数失败,则返回此错误 。 但是, WSAStartup似乎没有任何错误。 只需使用WSASocket创build套接字即可返回此信息。 更新: 错误: LoadUserProfile:错误代码2.找不到指定的文件 AdjustTokenPrivs:错误代码5.访问被拒绝