新聞中心
請教Linux關(guān)于UDP最大緩沖區(qū)設(shè)置?
1. tcp 收發(fā)緩沖區(qū)默認值 [root@ ]# cat /proc/sys/net/ipv4/tcp_rmem 4096 87380 4161536 87380 :tcp接收緩沖區(qū)的默認值 [root@ ]# cat /proc/sys/net/ipv4/tcp_wmem 4096 16384 4161536 16384 : tcp 發(fā)送緩沖區(qū)的默認值 2. tcp 或udp收發(fā)緩沖區(qū)最大值 [root@ ]# cat /proc/sys/net/core/rmem_max 131071 131071:tcp 或 udp 接收緩沖區(qū)最大可設(shè)置值的一半。 也就是說調(diào)用 setsockopt(s, SOL_SOCKET, SO_RCVBUF, &rcv_size, &optlen); 時rcv_size 如果超過 131071,那么 getsockopt(s, SOL_SOCKET, SO_RCVBUF, &rcv_size, &optlen); 去到的值就等于 131071 * 2 = 262142 [root@ ]# cat /proc/sys/net/core/wmem_max 131071 131071:tcp 或 udp 發(fā)送緩沖區(qū)最大可設(shè)置值得一半。 跟上面同一個道理 3. udp收發(fā)緩沖區(qū)默認值 [root@ ]# cat /proc/sys/net/core/rmem_default 111616:udp接收緩沖區(qū)的默認值 [root@ ]# cat /proc/sys/net/core/wmem_default 111616 111616:udp發(fā)送緩沖區(qū)的默認值 4. tcp 或udp收發(fā)緩沖區(qū)最小值 tcp 或udp接收緩沖區(qū)的最小值為 256 bytes,由內(nèi)核的宏決定; tcp 或udp發(fā)送緩沖區(qū)的最小值為 2048 bytes,由內(nèi)核的宏決定

如何判斷socket的連接狀態(tài)?
法一:當(dāng)recv()返回值小于等于0時,socket連接斷開。但是還需要判斷errno是否等于EINTR,如果errno==EINTR則說明recv函數(shù)是由于程序接收到信號后返回的,socket連接還是正常的,不應(yīng)close掉socket連接。
法二:structtcp_infoinfo;intlen=sizeof(info);getsockopt(sock,IPPROTO_TCP,TCP_INFO,&info,(socklen_t*)&len)
;if((info.tcpi_state==TCP_ESTABLISHED))則說明未斷開else斷開法三:若使用了select等系統(tǒng)函數(shù),若遠端斷開,則select返回1,recv返回0則斷開。其他注意事項同法一。
法四:intkeepAlive=1;//開啟keepalive屬性intkeepIdle=60;//如該連接在60秒內(nèi)沒有任何數(shù)據(jù)往來,則進行探測intkeepInterval=5;//探測時發(fā)包的時間間隔為5秒intkeepCount=3;//探測嘗試的次數(shù).如果第1次探測包就收到響應(yīng)了,則后2次的不再發(fā).setsockopt(rs,SOL_SOCKET,SO_KEEPALIVE,(void*)&keepAlive,sizeof(keepAlive))
;setsockopt(rs,SOL_TCP,TCP_KEEPIDLE,(void*)&keepIdle,sizeof(keepIdle))
;setsockopt(rs,SOL_TCP,TCP_KEEPINTVL,(void*)&keepInterval,sizeof(keepInterval))
;setsockopt(rs,SOL_TCP,TCP_KEEPCNT,(void*)&keepCount,sizeof(keepCount));設(shè)置后,若斷開,則在使用該socket讀寫時立即失敗,并返回ETIMEDOUT錯誤
到此,以上就是小編對于setsockopt nodelay的問題就介紹到這了,希望這2點解答對大家有用。
標(biāo)題名稱:setsockopt用法及參數(shù)詳解
網(wǎng)址分享:http://m.fisionsoft.com.cn/article/djjhish.html


咨詢
建站咨詢
