我一直在使用基于Indy TIdHTTP组件的跨平台Websocket客户端,找到了这里。
客户机TIdHTTPWebSocketClient内部使用TIdWebSocketMultiReadThread;后者通过使用Indy的GStack IOControl访问ioctl创建非阻塞套接字(InitSpecialEventSocket方法)。
从github下载的代码适用于Windows,但在Android上失败;FIONBIO必须更改为$5421。
目前我无法在iOS上进行测试,并且希望知道其他人是否设法让TIdHTTPWebSocketClient在这个平台上工作,以及应该使用FIONBIO的值。
提前谢谢。
发布于 2019-10-29 20:17:23
FIONBIO适用于Windows上的ioctlsocket()和POSIX上的ioctl()。
在POSIX上,您可以在创建套接字时指定SOCK_NONBLOCK标志,也可以使用fcntl(F_SETFL)在套接字上设置O_NONBLOCK标志。
注意,Indy在TIdStack.NewSocketHandle()和TIdStackBSDBase.WSSocket()方法上确实有一个非阻塞的参数,还有一个TIdStackBSDBase.SetBlocking()方法,但是它们目前还没有在非Windows平台上实现(为它们编写了代码,但还没有签入)。
https://stackoverflow.com/questions/58599892
复制相似问题