版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Linux下面下面socket編程的非阻塞編程的非阻塞TCP研究研究tcp協(xié)議本身是可靠的并不等于應(yīng)用程序用tcp發(fā)送數(shù)據(jù)就一定是可靠的.不管是否阻塞send發(fā)送的大小并不代表對(duì)端recv到多少的數(shù)據(jù).在阻塞模式下send函數(shù)的過程是將應(yīng)用程序請(qǐng)求發(fā)送的數(shù)據(jù)拷貝到發(fā)送緩存中發(fā)送并得到確認(rèn)后再返回.但由于發(fā)送緩存的存在表現(xiàn)為:如果發(fā)送緩存大小比請(qǐng)求發(fā)送的大小要大那么send函數(shù)立即返回同時(shí)向網(wǎng)絡(luò)中發(fā)送數(shù)據(jù)否則send向網(wǎng)絡(luò)發(fā)送緩存中不能容
2、納的那部分?jǐn)?shù)據(jù)并等待對(duì)端確認(rèn)后再返回(接收端只要將數(shù)據(jù)收到接收緩存中就會(huì)確認(rèn)并不一定要等待應(yīng)用程序調(diào)用recv)在非阻塞模式下send函數(shù)的過程僅僅是將數(shù)據(jù)拷貝到協(xié)議棧的緩存區(qū)而已如果緩存區(qū)可用空間不夠則盡能力的拷貝返回成功拷貝的大小如緩存區(qū)可用空間為0則返回1同時(shí)設(shè)置errno為EAGAIN.linux下可用sysctla|grep.ipv4.tcp_wmem查看系統(tǒng)默認(rèn)的發(fā)送緩存大小:.ipv4.tcp_wmem=409616384
3、81920這有三個(gè)值第一個(gè)值是socket的發(fā)送緩存區(qū)分配的最少字節(jié)數(shù)第二個(gè)值是默認(rèn)值(該值會(huì)被.ce.wmem_default覆蓋)緩存區(qū)在系統(tǒng)負(fù)載不重的情況下可以增長到這個(gè)值第三個(gè)值是發(fā)送緩存區(qū)空間的最大字節(jié)數(shù)(該值會(huì)被.ce.wmem_max覆蓋).根據(jù)實(shí)際測(cè)試如果手工更改了.ipv4.tcp_wmem的值則會(huì)按更改的值來運(yùn)行否則在默認(rèn)情況下協(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但實(shí)際上協(xié)議棧會(huì)將其擴(kuò)大1倍然后就表現(xiàn)為無數(shù)據(jù)可讀的現(xiàn)象這種情況需要應(yīng)用程序來處理超時(shí).一般做法是設(shè)定一個(gè)等待的最大時(shí)間如果超出這個(gè)時(shí)間依然沒有數(shù)據(jù)可讀則認(rèn)為socket已不可用.發(fā)送應(yīng)用程序會(huì)不斷的將余下的數(shù)據(jù)發(fā)送到網(wǎng)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于c#的socket編程的tcp異步實(shí)現(xiàn)
- socket網(wǎng)絡(luò)編程linux下實(shí)現(xiàn)聊天室費(fèi)下載
- socket編程原理
- 基于linux的socket網(wǎng)絡(luò)編程聊天工具課程設(shè)計(jì)
- java android socket編程
- 外文翻譯--socket網(wǎng)絡(luò)編程的設(shè)計(jì)與實(shí)現(xiàn)
- 外文翻譯--socket網(wǎng)絡(luò)編程的設(shè)計(jì)與實(shí)現(xiàn)
- 談?wù)刬os網(wǎng)絡(luò)編程之socket編程技術(shù)及應(yīng)用
- linux音頻編程
- 多核處理器的有鎖編程與非阻塞算法研究.pdf
- java基于socket網(wǎng)絡(luò)編程的超市收銀管理系統(tǒng)
- 外文翻譯--socket網(wǎng)絡(luò)編程的設(shè)計(jì)與實(shí)現(xiàn)(中文)
- 外文翻譯--socket網(wǎng)絡(luò)編程的設(shè)計(jì)與實(shí)現(xiàn)(英文)
- linux多線程編程
- linux的應(yīng)用及shell編程
- 基于LINUX大規(guī)模TCP連接研究與設(shè)計(jì).pdf
- linux系統(tǒng)編程答案
- linux下c編程詳解
- 非阻塞無序鏈表的研究.pdf
- TCP-IP SOCKET技術(shù)與大型機(jī)分布式系統(tǒng)的研究與應(yīng)用.pdf
評(píng)論
0/150
提交評(píng)論