使用setsockopt()接口,設置TCP的接收與發送超時,Invalid argument錯誤問題

使用TCP套接字時,當無網絡連接時,還會繼續send,繼續recv阻塞,知道TCP自己協議機制判斷斷開連接時才會停止發送和接收,時間需要幾分鐘之久。
解決的辦法是,自己設置接收超時時間,當超時后重新發送,或者從新初始化socket然后在重新創建socket重新connect
代碼如下: ?
?????int iSendTimeout, iRecvTimeOut;
???????iClientSock = socket(AF_INET, SOCK_STREAM, 0);
???????if(iClientSock < 0)
???????{
???????????????printf("[%s:%d]client init error\r\n", __FILE__, __LINE__);
???????????????return ERROR;
???????}

???????iRecvTimeOut = 3000; ???????
???????iRet1 =?setsockopt(iClientSock, SOL_SOCKET, SO_RCVTIMEO, &iRecvTimeOut, sizeof(int));
???????printf("%s\r\n", strerror(errno));
???????iSendTimeout = 3000; ???????
???????iRet2 =?setsockopt(iClientSock, SOL_SOCKET, SO_SNDTIMEO, (char *)&iSendTimeout, sizeof(int));
???????printf("%s\r\n", strerror(errno));

但是編譯會出錯,perror顯示參數錯誤(Invalid argument?),看了下內核中的實現,參數確實錯了,其中最后一個參數是sizeof(struct timeval) 類型的,而非其他類型
改正為:
struct timeval tv; ???//聲明一個?struct timeval?類型的變量
然后最后個參數寫為:
iRet2=setsockopt(iClientSock, SOL_SOCKET, SO_SNDTIMEO, &iSendTimeout,?sizeof(tv));

參數解析:
?int setsockopt(int s, int level, int optname,const void *optval, socklen_t optlen);
1)int s :sockfd,即socket文件描述符
2)int level :?SOL_SOCKET(通用套接字) ,IPPROTO_TCP,等
3)?int optname??:SO_SNDTIMEO(發送超時時間)|SO_RSVTIMEO(接收超時時間)等,設置選項,
4)?const void *optval :自定義的超時時間的地址
5)?struct timeval的大小,即sizeof(struct timecal)

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

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

相關文章

關于SpringCloud、SpringBoot 希望這是說得最詳細的

幾年前&#xff0c;沒幾個jar沖突一下都不叫搭框架 —— java面試必修 什么是Spring Boot 用我的話來理解&#xff0c;Spring Boot就是整合了框架的框架&#xff0c;它讓一切依賴都變得有序簡單&#xff0c;你不用操心A.jar是什么版本&#xff0c;又依賴哪些版本的jar&#xff…

weui-switch開關控件,表單提交后如何取值

最近在學習weui這個框架&#xff0c;做了一些小的試驗&#xff0c;發現weui-switch控件直接提交不能獲取到表單信息&#xff0c;在segmentfault上發現也有人提了這個問題&#xff0c;有人說可以設置一個隱含標簽來捕獲開關的狀態&#xff0c;試了一下&#xff0c;確實可以&…

麥克風設計指導與選型參考

隨著語音識別技術的成熟&#xff0c;智能音箱類產品的火爆&#xff0c;越來越多的產品可以升級為語音交互產品&#xff1b; 下面簡單介紹下此類產品的語音前端--麥克風陣列設計相關注意事項&#xff1a; 線性四麥陣列構型&#xff1a;如上圖所示&#xff0c;麥克風直線等距擺…

[BZOJ1419] Red is good(期望DP)

傳送門 逆推 只不過順序還是順著的&#xff0c;思想是逆著的 f[i][j]表示還剩下i張紅牌&#xff0c;j張黑牌的期望值 那么邊界是 f[i][0]i&#xff0c;因為只剩i張紅牌 f[0][j]0&#xff0c;只剩黑牌&#xff0c;顯然直接停止最優 f[i][j] max(0,i/(ij)*f[i-1][j]j/(ij)*f[i][…

Linux下高性能網絡編程中的幾個TCP/IP選項_SO_REUSEADDR、SO_RECVBUF、SO_SNDBUF、SO_KEEPALIVE、SO_LINGER、TCP_CORK、TCP_NODE

最近在新的平臺上測試程序&#xff0c;以前一些沒有注意到的問題都成為了性能瓶頸&#xff0c;通過設置一些TCP/IP選項能夠解決一部分問題&#xff0c;當然根本的解決方法是重構代碼&#xff0c;重新設計服務器框架。先列出幾個TCP/IP選項&#xff1a; 選項 man 7 socket: SO_R…

云計算在未來一定是不可或缺的

2019獨角獸企業重金招聘Python工程師標準>>> 在2018京東云合作伙伴大會上&#xff0c;京東云總裁申元慶表示&#xff0c;技術發展的大趨勢是“分久必合&#xff0c;合久必分”循環往復的波動&#xff0c;近十年來云計算的發展將算力、存儲、帶寬全部集中在中央部分&…

智能音箱 之 音頻通路質量--測試與參數

一、概述 當將語音識別算法接入到設備時&#xff0c;務必要保證設備的音頻通路具有足夠的質量。因此對設備進行音頻測試&#xff0c;以評估能夠影響語音識別性能的音頻前端的音頻參數。如下要點對語音識別至關重要&#xff1a; 自然聲音合適的增益良好的信噪比一致的響應&…

關于Linux路由表的route命令

轉自&#xff1a;http://www.cnblogs.com/gunl/archive/2010/09/14/1826234.html 查看 Linux 內核路由表 使用下面的 route 命令可以查看 Linux 內核路由表。 # route Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.0.0 * …

Python學習 - 常用模塊(二)

目錄 一. 常用模塊 - hashlib 二. 常用模塊 - hmac 三. 常用模塊 - logging 四. 常用模塊 - re 五. 常用模塊 - requests 六. 常用模塊 - paramiko 一. 常用模塊 - hashlib hash: 一種算法, 3.x里代替了md5模塊和sha模塊, 主要提供 SHA1, SHA224, SHA256, SHA384, SHA512, MD5 …

select函數分析

Select在Socket編程中還是比較重要的&#xff0c;可是對于初學Socket的人來說都不太愛用Select寫程序&#xff0c;他們只是習慣寫諸如connect、accept、recv或recvfrom這樣的阻塞程序&#xff08;所謂阻塞方式block&#xff0c;顧名思義&#xff0c;就是進程或是線程執行到這些…

UART介紹

1. 概述 UART, Universal Asynchronous Receiver-Transmitter, 通用異步收發器&#xff1b; 串口&#xff1a;在嵌入式里指的是UART口&#xff0c;常用TTL電平即3.3V或者5.0V&#xff1b; COM口&#xff1a;在臺式機上常用的口&#xff0c;DB9那種接口&#xff0c;接口協議只…

mongodb環境安裝

1、mongodb安裝 我采用的是離線安裝&#xff0c; &#xff08;1&#xff09;在mongodb的官方網址下載所需要的版本。我下載的是 mongodb-linux-x86_64-ubuntu1604-3.4.5.tgz 。 &#xff08;2&#xff09;下載后解壓縮到待安裝目錄&#xff0c;我這里下載在了Downloads目錄…

rabbitmq隊列的exclusive,durability,auto-delete屬性以及消息可靠傳輸設計

非集群下&#xff0c;簡單的說&#xff1a;- 如果是excl&#xff0c;則設置durability沒有意義&#xff0c;因為不管服務器掛了還是客戶端主動/被動斷開了&#xff0c;隊列都會自動刪除。- auto-delete&#xff0c;其實可簡單的認為是同理&#xff0c;即使非excl&#xff0c;則…

IIC 總線接口詳細介紹

1. 概述 IIC Inter Integrated-Circuit 總線是PHLIPS公司推出的一種串行總線&#xff0c;是具備多主機系統所需的包括總線裁決和高低速器件同步功能的高性能串行總線&#xff0c;它支持多主控(multimastering)&#xff0c;其中任何能夠進行發送和接收的設備都可以成為主總線。…

DMA數據傳輸過程

DMA方式具有如下特點&#xff1a;1、 外部設備的輸入輸出請求直接發給主儲存器。主存儲器既可以被CPU訪問&#xff0c;也可以被外圍設備訪問。因此&#xff0c;在主存儲器中通常要有一個存儲管理部件來為各種訪問主存儲器的申請排隊&#xff0c;一般計算機系統把外圍設備的訪問…

Android JNI開發系列(二)HelloWorld

2019獨角獸企業重金招聘Python工程師標準>>> 入門HelloWorld 新建項目 Configure your new project部分選中 Include C Support 復選框 Next 正常填寫所有其他字段并完成向導接下來幾個部分 在向導的Customize C Support 部分&#xff0c;您可以使用謝列選項自定…

sublime text3安裝js提示的插件

今天安裝Sublime Text3的js插件&#xff0c;在網上查了很多資料&#xff0c;為了方便以后看&#xff0c;寫一個安裝插件的總結和方法。 要安裝js相關的插件&#xff0c;就要先安裝一個Package Control&#xff08;插件管理器&#xff09;的插件&#xff0c;通過這個插件再去安裝…

SPI接口詳細介紹

1. 概述 SPI Serial Peripheral Interface&#xff0c;是串行外圍設備接口&#xff0c;是一種高速&#xff0c;全雙工&#xff0c;同步的通信總線。常規只占用四根線&#xff0c;節約了芯片管腳&#xff0c;PCB的布局省空間。現在越來越多的芯片集成了這種通信協議&#xff0…

駐扎博客園

今天把之前hexo里的一些文章全部轉移到博客園了&#xff0c;之后就在博客園寫點東西&#xff0c;記錄一些生活的瑣事。為什么要移至博客園呢&#xff1f;其實很簡單&#xff0c;這邊可以和一些同意從事前端的小伙伴一起互動。技術還是需要多討論的&#xff0c;希望之后能多更新…

H.264 Profile、Level、Encoder三張簡圖

H.264有四種畫質級別,分別是BP、EP、MP、HP&#xff1a; 1、BP-Baseline Profile&#xff1a;基本畫質。支持I/P 幀&#xff0c;只支持無交錯&#xff08;Progressive&#xff09;和CAVLC&#xff1b;   2、EP-Extended profile&#xff1a;進階畫質。支持I/P/B/SP/SI 幀&…