我是第一次用TCP,基本概念都知道了,現在卡在了異步發送問題上:
我在程式中用WSAAsyncSelect注冊了FD_READ | FD_WRITE | FD_CLOSE事件,然后,假設我有2個(或者20個)30M的檔案要排隊發送給同一個客戶端(現在不考慮客戶端怎么接收,只考慮發送問題),假設偽代碼是:
Mysend(file1); //Mysend會呼叫我自己包裝的TcpServers類去發送
Mysend(file2);
發送file的時候,檔案大小肯定是超過了網路快取的,那么send命令發送一些位元組后會回傳WSAEWOULDBLOCK,并稍后系統會向訊息佇列投遞FD_WRITE,假設這個FD_WRITE會在1秒后到達。
但是,由于send回傳了,這個時候Mysend(file2)執行了,Mysend(file2)也呼叫send(),正巧,這個時候網路快取能用了,它就發出去了。那么,是不是就亂套了?
要是在Mysend(file1);和Mysend(file2)之間放入event物件也不行啊,因為不是多執行緒,程式會停止。
如果說所有的發送行為必須是回應FD_WRITE事件而發生,那我的程式豈不是一直要重使能FD_WRITH?程式很忙?
望得到解答,謝謝。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/128960.html
標籤:網絡協議與配置
