我正在做一个基本的聊天程序,我有一个问题。 我想问一下,recv(socket,buf,buflen,0)在C++中是异步的吗?我在while循环中使用它,并阻塞循环,直到服务器不向客户端发送数据。C++ recv异步服务器客户端
0
A
回答
0
默认情况下,一个插座使用阻止I/O。如果要使用非阻塞I/O,则必须通过在Windows上使用ioctlsocket(FIONBIO)
或在其他平台上使用fcntl(O_NONBLOCK)
来明确启用它。如果I/O操作会阻止调用者,则I/O操作将失败,并显示可检测到的错误((WSA)EWOULDBLOCK
,EAGAIN
,EINPROGRESS
等),以便您稍后重复该操作。
或者,您可以使用select()
或(e)poll()
在执行否则会阻塞的读/写操作之前等待套接字处于可读/写状态。或者,在某些平台上,可以使用setsockopt()
启用SO_RCVTIMEO
/SO_SNDTIMEO
超时以阻止读取/写入操作。如果你想异步I/O取而代之(开始一个操作,它在后台完成,然后在完成时通知你),你必须将I/O移到单独的工作线程,或者在Windows上您可以使用支持重叠I/O和I/O完成端口的一些扩展套接字函数(ConnectEx()
,WSARecv()
,WSASend()
等)。
相关问题
- 1. 多客户端C服务器的异步C客户端
- 2. 客户端与服务器端异步
- 3. 异步客户端服务器WCF
- 4. Java nio服务器客户端异步
- 5. 客户端异步WCF Vs服务器端异步WCF
- 6. c#异步服务器/客户端。插座(在客户端)断开“随机”
- 7. 客户端异步调用WCF服务
- 8. 在C#中的多个客户端的异步UDP服务器
- 9. C#异步服务器/客户端架构
- 10. 异步客户端/服务器通信C#
- 11. 异步单服务器多客户端使用c#
- 12. C#,异步套接字服务器/客户端,StackOverflowException
- 13. C# - 服务器/客户端多线程或异步
- 14. 基本Send()和Recv()TCP服务器和客户端C++
- 15. C Socket客户端不recv() - 从服务器的任何字节
- 16. 服务器端客户端同步
- 17. 服务器/客户端C#
- 18. 客户端服务器C++
- 19. 同时GRPC客户端同步/异步服务器
- 20. 客户端异步。请求与服务器端渲染
- 21. 异步传递客户端到服务器的值并返回到客户端
- 22. WCF异步客户端调用WCF异步服务
- 23. WCF签约异步服务vs异步客户端
- 24. 客户端 - 服务器同步
- 25. 同步:客户端,服务器聊天
- 26. iperf服务器和客户端差异
- 27. 连接多个客户端的异步套接字服务器
- 28. 服务器端客户端程序C
- 29. 异步TCP服务器/客户端方法
- 30. C# - SMTP异步 - 回调的Web服务客户端