日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

用setsockopt()来控制recv()与send()的超时

發布時間:2025/3/13 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用setsockopt()来控制recv()与send()的超时 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

用setsockopt()來控制recv()與send()的超時

在send(),recv()過程中有時由于網絡狀況等原因,收發不能預期進行,而設置收發超時控制:

在Linux下需要注意的是時間的控制結構是struct timeval而并不是某一整型數,以下是來自于網上一篇文章中的摘錄,它是這樣寫的:

int nNetTimeout=1000;//1秒,

//設置發送超時

setsockopt(socket,SOL_SOCKET,SO_SNDTIMEO,(char *)&nNetTimeout,sizeof(int));

//設置接收超時

setsockopt(socket,SOL_SOCKET,SO_RCVTIMEO,(char *)&nNetTimeout,sizeof(int));

這樣做在Linux環境下是不會產生效果的,須如下定義:struct timeval timeout = {3,0};?

?//設置發送超時

setsockopt(socket,SOL_SOCKET,SO_SNDTIMEO,(char *)&timeout,sizeof(struct timeval));

//設置接收超時

setsockopt(socket,SOL_SOCKET,SO_RCVTIMEO,(char *)&timeout,sizeof(struct timeval));

有兩點注意就是:

1)recv ()的第四個參數需為MSG_WAITALL,在阻塞模式下不等到指定數目的數據不會返回,除非超時時間到。還要注意的是只要設置了接收超時,在沒有MSG_WAITALL時也是有效的。說到底超時就是不讓你的程序老在那兒等,到一定時間進行一次返回而已。

2)即使等待超時時間值未到,但對方已經關閉了socket, 則此時recv()會立即返回,并收到多少數據返回多少數據。

分享到:

轉載于:https://www.cnblogs.com/westfly/archive/2011/09/08/2171212.html

總結

以上是生活随笔為你收集整理的用setsockopt()来控制recv()与send()的超时的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。