3

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

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

4

2 回答 2

4

不,普通的旧 BSD 样式套接字在 Windows 上默认不是非阻塞的。请参阅Winsock Programmer's FAQ中的示例。

如果您使用 MFC 及其 CAsyncSocket 混乱,那么是的,这都是非阻塞的,但这是一个单独的问题

于 2009-08-31T13:09:11.617 回答
3

我相信这个参考可能会有所帮助;请特别注意,

尽管 Windows 套接字支持对套接字的阻塞操作,但强烈建议不要使用它们。受限于使用阻塞模式的程序员(例如,作为要移植的现有应用程序的一部分)应该了解 Windows 套接字中阻塞操作的语义。

如果您完全了解此处列出的无数问题,并且发现处理所有这些问题比设计您的程序以适应 Windows 更可取,而不是成为来自 Unix的半哔声端口,请继续调用ioctlsocket cmd 参数设置为 FIONBIO,第三个参数指向一个值为 0 的长字。但是,不要说你没有被警告;-)。

于 2009-08-30T05:02:30.040 回答