我正在做一些相当简单的跨平台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
答案 0 :(得分:4)
不,Windows上默认情况下,普通的旧BSD样式套接字不非阻塞。请参阅Winsock Programmer's FAQ。
中的示例如果您使用MFC及其CAsyncSocket混乱,那么是的,它都是非阻塞的,但那是separate issue。
答案 1 :(得分:3)
我相信this reference可能会有所帮助;请注意,特别是
虽然阻止了操作 Windows支持套接字 套接字,它们的用途很强 泄气。程序员是谁 限制使用阻止模式 - 例如,作为现有的一部分 要移植的申请 - 应该知道的语义 阻止Windows中的操作 套接字。
如果您完全了解列出here的众多问题,并且发现处理所有这些问题比设计您的程序更适合Windows,而不是半个哔声来自Unix的em> ed端口,正在进行ioctlsocket调用,cmd参数设置为FIONBIO,第三个参数指向值为0的长字。但是,不要说你没有被警告;-)