1. 程式人生 > >MFC中設定socket超時

MFC中設定socket超時

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()會立即返回,並收到多少資料返回多少資料。