linux下面socket編程的非阻塞tcp研究_第1頁
已閱讀1頁,還剩2頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、Linux下面下面socket編程的非阻塞編程的非阻塞TCP研究研究tcp協(xié)議本身是可靠的并不等于應(yīng)用程序用tcp發(fā)送數(shù)據(jù)就一定是可靠的.不管是否阻塞send發(fā)送的大小并不代表對端recv到多少的數(shù)據(jù).在阻塞模式下send函數(shù)的過程是將應(yīng)用程序請求發(fā)送的數(shù)據(jù)拷貝到發(fā)送緩存中發(fā)送并得到確認后再返回.但由于發(fā)送緩存的存在表現(xiàn)為:如果發(fā)送緩存大小比請求發(fā)送的大小要大那么send函數(shù)立即返回同時向網(wǎng)絡(luò)中發(fā)送數(shù)據(jù)否則send向網(wǎng)絡(luò)發(fā)送緩存中不能容

2、納的那部分數(shù)據(jù)并等待對端確認后再返回(接收端只要將數(shù)據(jù)收到接收緩存中就會確認并不一定要等待應(yīng)用程序調(diào)用recv)在非阻塞模式下send函數(shù)的過程僅僅是將數(shù)據(jù)拷貝到協(xié)議棧的緩存區(qū)而已如果緩存區(qū)可用空間不夠則盡能力的拷貝返回成功拷貝的大小如緩存區(qū)可用空間為0則返回1同時設(shè)置errno為EAGAIN.linux下可用sysctla|grep.ipv4.tcp_wmem查看系統(tǒng)默認的發(fā)送緩存大小:.ipv4.tcp_wmem=409616384

3、81920這有三個值第一個值是socket的發(fā)送緩存區(qū)分配的最少字節(jié)數(shù)第二個值是默認值(該值會被.ce.wmem_default覆蓋)緩存區(qū)在系統(tǒng)負載不重的情況下可以增長到這個值第三個值是發(fā)送緩存區(qū)空間的最大字節(jié)數(shù)(該值會被.ce.wmem_max覆蓋).根據(jù)實際測試如果手工更改了.ipv4.tcp_wmem的值則會按更改的值來運行否則在默認情況下協(xié)議棧通常是按.ce.wmem_default和.ce.wmem_max的值來分配內(nèi)存的.

4、應(yīng)用程序應(yīng)該根據(jù)應(yīng)用的特性在程序中更改發(fā)送緩存大小:socklen_tsendbuflen=0socklen_tlen=sizeof(sendbuflen)getsockopt(clientSocketSOL_SOCKETSO_SNDBUF(void)printf(“defaultsendbuf:%dn“sendbuflen)sendbuflen=10240setsockopt(clientSocketSOL_SOCKETSO_SNDB

5、UF(void)getsockopt(clientSocketSOL_SOCKETSO_SNDBUF(void)printf(“nowsendbuf:%dn“sendbuflen)需要注意的是雖然將發(fā)送緩存設(shè)置成了10k但實際上協(xié)議棧會將其擴大1倍然后就表現(xiàn)為無數(shù)據(jù)可讀的現(xiàn)象這種情況需要應(yīng)用程序來處理超時.一般做法是設(shè)定一個等待的最大時間如果超出這個時間依然沒有數(shù)據(jù)可讀則認為socket已不可用.發(fā)送應(yīng)用程序會不斷的將余下的數(shù)據(jù)發(fā)送到網(wǎng)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論