linux設置套接字緩沖區的大小

系統提供的socket緩沖區大小為8K,你可以將之設置為64K,尤其在傳輸實時視頻時。?

socket發送數據時候先把數據發送到socket緩沖區中,之后接受函數再從緩沖區中取數據,如果發送端特別快的時候,緩沖區很快就被填滿(socket默認的是1024×8=8192字節),這時候我們應該根據情況設置緩沖區的大小,可以通過setsockopt函數實現

?
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <assert.h>
?
int main(int argc,char **argv)
{
??? int err = -1;?? ??? ?/* 返回值 */
??? int s = -1;?? ??? ??? ?/* socket描述符 */
??? int snd_size = 0;?? /* 發送緩沖區大小 */
??? int rcv_size = 0;?? ?/* 接收緩沖區大小 */
??? socklen_t optlen;?? ?/* 選項值長度 */
?
??? /*
???? * 建立一個TCP套接字
???? */
??? s = socket(PF_INET,SOCK_STREAM,0);
??? if( s == -1){
?? ??? ?printf("建立套接字錯誤\n");
?? ??? ?return -1;?? ?
??? }
??? ?
??? /*
???? * 先讀取緩沖區設置的情況
???? * 獲得原始發送緩沖區大小
???? */
??? optlen = sizeof(snd_size);
??? err = getsockopt(s, SOL_SOCKET, SO_SNDBUF,&snd_size, &optlen);
??? if(err<0){
?? ??? ?printf("獲取發送緩沖區大小錯誤\n");
??? }? ?
??? /*
???? * 打印原始緩沖區設置情況
???? */
?
??? /*
???? * 獲得原始接收緩沖區大小
???? */
??? optlen = sizeof(rcv_size);
??? err = getsockopt(s, SOL_SOCKET, SO_RCVBUF, &rcv_size, &optlen);
??? if(err<0){
?? ??? ?printf("獲取接收緩沖區大小錯誤\n");
??? }
??? ?
?? printf(" 發送緩沖區原始大小為: %d 字節\n",snd_size);
?? printf(" 接收緩沖區原始大小為: %d 字節\n",rcv_size);
?
??? /*
???? * 設置發送緩沖區大小
???? */
??? snd_size = 10*1024;??? /* 發送緩沖區大小為8K */
??? optlen = sizeof(snd_size);
??? err = setsockopt(s, SOL_SOCKET, SO_SNDBUF, &snd_size, optlen);
??? if(err<0){
?? ??? ?printf("設置發送緩沖區大小錯誤\n");
??? }
?
??? /*
???? * 設置接收緩沖區大小
???? */
??? rcv_size = 10*1024;??? /* 接收緩沖區大小為8K */
??? optlen = sizeof(rcv_size);
??? err = setsockopt(s,SOL_SOCKET,SO_RCVBUF, (char *)&rcv_size, optlen);
??? if(err<0){
?? ??? ?printf("設置接收緩沖區大小錯誤\n");
??? }
?
??? /*
???? * 檢查上述緩沖區設置的情況
???? * 獲得修改后發送緩沖區大小
???? */
??? optlen = sizeof(snd_size);
??? err = getsockopt(s, SOL_SOCKET, SO_SNDBUF,&snd_size, &optlen);
??? if(err<0){
?? ??? ?printf("獲取發送緩沖區大小錯誤\n");
??? }? ?
?
??? /*
???? * 獲得修改后接收緩沖區大小
???? */
??? optlen = sizeof(rcv_size);
??? err = getsockopt(s, SOL_SOCKET, SO_RCVBUF,(char *)&rcv_size, &optlen);
??? if(err<0){
?? ??? ?printf("獲取接收緩沖區大小錯誤\n");
??? }
?
??? /*
???? * 打印結果
???? */
??? printf(" 發送緩沖區大小為: %d 字節\n",snd_size);
??? printf(" 接收緩沖區大小為: %d 字節\n",rcv_size);
?
??? close(s);
??? return 0;

}

運行后的結果:

發送緩沖區原始大小為: 16384 字節

?接收緩沖區原始大小為: 87380 字節
?發送緩沖區大小為: 20480 字節
?接收緩沖區大小為: 20480 字節
從結果 看出ubuntu系統默認的發送緩沖區大小:16384字節,接收緩沖區87380字節

但是有個問題我設置的接收和發送緩沖區大小為:10*1024=10240字節,但是實際用getoptsock得到卻是20480字節加了一倍。改成其他大小也是都是加倍。

這是由linux內核的算法決定的。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/254118.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/254118.shtml
英文地址,請注明出處:http://en.pswp.cn/news/254118.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Java MyBatis Generator】使用generator自動生成Dao,Mapping和實體文件

具體請參照&#xff1a; http://blog.csdn.net/fengshizty/article/details/43086833 按照上面博客地址&#xff0c;下載Generator的依賴包&#xff1a; 如下是我的配置文件&#xff1a; 1 <?xml version"1.0" encoding"UTF-8"?>2 <!DOCTYPE ge…

h5移動端設備像素比dpr介紹

首先介紹一下概念 devicePixelRatio其實指的是window.devicePixelRatio window.devicePixelRatio是設備上物理像素和設備獨立像素(device-independent pixels (dips))的比例。 公式表示就是&#xff1a;window.devicePixelRatio 物理像素 / dips 好了&#xff0c;到了這里有出…

halcon直線標定板對相機標定的效果評估(對比矯正前后、對比標定板矯正效果)

原圖 程序源碼 * gen_caltab (7, 7, 0.0025, 1/2.5, GB025標定板.descr, GB025標定板.ps) * Calibration 01: Code generated by Calibration 01 * CameraParameters : [0.048105,-44.0585,8.31518e-006,8.3e-006,641.37,588.269,1280,1024] * CameraPose : [-0.000849522,-0.…

【QQ輸入法】QQ輸入法-剪切板 釋放內存

發現一個神奇的情況&#xff1a; 清除和關閉的操作&#xff1a; 1. 2.右鍵 3.點擊 4.清空 5.最后需要關閉 QQ輸入法的進程

Socket編程原理

什么是SocketSocket接口是TCP/IP網絡的API&#xff0c;Socket接口定義了許多函數或例程&#xff0c;程序員可以用它們來開發TCP/IP網絡上的應用程序。要學Internet上的TCP/IP網絡編程&#xff0c;必須理解Socket接口。Socket接口設計者最先是將接口放在Unix操作系統里面的。如果…

【XLL 框架庫函數】 TempActiveCell/TempActiveCell12

這兩個函數創建 XLOPER/XLOPER12 &#xff0c;包含了當前激活工作表上的單元格引用。 LPXLOPER TempActiveCell(WORD row, BYTE col); LPXLOPER12 TempActiveCell12(RW row, COL co); 參數 row 引用行號&#xff0c;行號參數是從0開始的&#xff0c;因此 第一行就是0. col 引用…

POJ 3264 Balanced Lineup【線段樹區間查詢求最大值和最小值】

Balanced Lineup Time Limit: 5000MS Memory Limit: 65536KTotal Submissions: 53703 Accepted: 25237Case Time Limit: 2000MSDescription For the daily milking, Farmer Johns N cows (1 ≤ N ≤ 50,000) always line up in the same order. One day Farmer John decides to…

halcon測試一張圖片是否過曝或過暗

read_image (Image, 1.bmp) count_obj (Image, Number) if(Number<0)return() endif min_max_gray (Image, Image, 0, Min, Max, Range) if(Min<1)*圖像過暗 endif if(Max>254)*圖像過曝 endif

真的要做一輩子的程序員嗎?來自10年程序員的心聲

經常聽一些同學說&#xff1a;不知道下一份工作該去哪類公司做些什么&#xff0c;我的職場人際一團糟老板不重視我&#xff0c;我現在成長的非常慢所以又想跳槽了&#xff0c;我看不到公司的發展前景好迷茫&#xff0c;其實這一切的困惑都來源于沒有做好職業規劃或者你根本就沒…

網絡編程之 TCP / UDP 及其流程比較

TCP與UDP的區別 1、基于連接與無連接 2、對系統資源的要求&#xff08;TCP較多&#xff0c;UDP少&#xff09;3、UDP程序結構較簡單 流模式與數據報模式 4、TCP保證數據正確性&#xff0c;UDP可能丟包 5、TCP保證數據順序&#xff0c;UDP不保證具體編程時的區別 1、socket()的參…

Tomcat在Linux上的安裝與配置

Tomcat在Linux上的安裝與配置 1、 jdk下載地址&#xff1a; http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html tomcat下載地址:http://tomcat.apache.org/download-70.cg 2、jdk安裝與配置.&#xff08;rpm包&#xff09; (1)jdk安裝…

Spring在3.1版本后的bean獲取方法的改變

xml配置不變&#xff0c;如下 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://…

使用halcon選擇點擬合成直線求直線角度

原圖 源碼 read_image (Image, 0.bmp) dev_clear_window () dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle) dev_display (Image)binary_threshold (Image, Region, max_separability, dark, UsedThreshold) connection (Region, ConnectedRegions) select_s…

Linux網絡/firewalld和netfilter/netfilter/iptables語法

為什么80%的碼農都做不了架構師&#xff1f;>>> linux網絡相關 查看網卡網絡信息 ifconfig 命令查看網卡網絡信息&#xff0c;比如ip、網關、子網掩碼等&#xff0c;但是安裝centos7的版本或者某些未知原因&#xff0c;此命令提示找不到&#xff0c;我們可以使用Yu…

Chrome開發者工具詳解(4)-Profiles面板

Chrome開發者工具詳解(4)-Profiles面板 如果上篇中的Timeline面板所提供的信息不能滿足你的要求&#xff0c;你可以使用Profiles面板&#xff0c;利用這個面板你可以追蹤網頁程序的內存泄漏問題&#xff0c;進一步提升程序的JavaScript執行性能。 概述 當前使用的Chrome最新版為…

etcd raft library設計原理和使用

早在2013年11月份&#xff0c;在raft論文還只能在網上下載到草稿版時&#xff0c;我曾經寫過一篇blog對其進行簡要分析。4年過去了&#xff0c;各種raft協議的講解鋪天蓋地&#xff0c;raft也確實得到了廣泛的應用。其中最知名的應用莫過于etcd。etcd將raft協議本身實現為一個l…

halcon通過點擬合圓形,鼠標選點

原圖 源碼 read_image (Image, 0.bmp) dev_clear_window () dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle) dev_display (Image)binary_threshold (Image, Region, max_separability, dark, UsedThreshold) connection (Region, ConnectedRegions) select_s…

JDBC事務--軟件開發三層架構--ThreadLocal

JDBC事務--軟件開發三層架構--ThreadLocal 一.JDBC事務 1.概述: 事務是指邏輯上的一組操作!這一組操作,通常認為是一個整體,不可拆分! 特點:同生共死;事務內的這一組操作要么全部成功,要么全部失敗! 作用:保證邏輯操作的完整性,安全性! 2.使用(3種方式) 1)面向數據庫,使用S…

LINUX多播編程

一.單播&#xff0c;廣播和多播 1.單播用于兩個主機之間的端對端通信&#xff0c;廣播用于一個主機對整個局域網上所有主機上的數據通信。單播和廣播是兩個極端&#xff0c;要么對一個主機進行通信&#xff0c;要么對整個局域網上的主機進行通信。實際情況下&#xff0c;經常需…

cas單點登錄搭建

Cas Server下載&#xff1a;http://developer.jasig.org/cas/ Cas Client下載&#xff1a;http://developer.jasig.org/cas-clients/ 測試環境&#xff1a; jdk&#xff1a;java version "1.8.0_60" tomcat&#xff1a;apache-tomcat-7.0.65 mysql&#xff1a;mysql5…