我正在做一個基本的聊天程序,我有一個問題。 我想問一下,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#
- 9. C#,異步套接字服務器/客戶端,StackOverflowException
- 10. C#異步服務器/客戶端架構
- 11. 異步單服務器多客戶端使用c#
- 12. C# - 服務器/客戶端多線程或異步
- 13. 在C#中的多個客戶端的異步UDP服務器
- 14. C Socket客戶端不recv() - 從服務器的任何字節
- 15. 基本Send()和Recv()TCP服務器和客戶端C++
- 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服務客戶端