如何在Windows中将套接字设置为阻止模式?

时间:2009-08-30 04:50:38

标签: c++ networking sockets winsock

我正在做一些相当简单的跨平台TCP套接字编程。遗憾的是,我发现在Windows上编译时,我的套接字默认是非阻塞的,而在OS X上,它们默认是阻塞的。如何在Windows上强制套接字进入阻止模式?它们通常默认为非阻塞模式还是非常错误?

我的代码部分基于以下简单示例: http://cs.baylor.edu/~donahoo/practical/CSockets/code/TCPEchoClient.c http://cs.baylor.edu/~donahoo/practical/CSockets/code/TCPEchoServer.c

2 个答案:

答案 0 :(得分:4)

不,Windows上默认情况下,普通的旧BSD样式套接字非阻塞。请参阅Winsock Programmer's FAQ

中的示例

如果您使用MFC及其CAsyncSocket混乱,那么是的,它都是非阻塞的,但那是separate issue

答案 1 :(得分:3)

我相信this reference可能会有所帮助;请注意,特别是

  

虽然阻止了操作   Windows支持套接字   套接字,它们的用途很强   泄气。程序员是谁   限制使用阻止模式 -   例如,作为现有的一部分   要移植的申请 -   应该知道的语义   阻止Windows中的操作   套接字。

如果您完全了解列出here的众多问题,并且发现处理所有这些问题比设计您的程序更适合Windows,而不是半个哔声 ed端口,正在进行ioctlsocket调用,cmd参数设置为FIONBIO,第三个参数指向值为0的长字。但是,不要说你没有被警告;-)