socket程式設計中的超時設定示例詳解之二

2021-07-22 10:58:37 字數 2043 閱讀 7365

**:

接前文二、操作(send, recv)超時

對它們有兩種方式來設定超時,

1. 將send, recv設定成非阻塞模式,然後用select來設定超時機制,就如上面的connect方式一樣。

2. 使用setsockopt()函式來設定相應的超時機制。

因為前一種方式在connect中重點說明,本節來主要說明第二種方式。

示例**如下:

對send和recv進行了超時設定,並最多做四次重試

/** \brief

* tcp client

*/#include 

#include 

#include 

#include 

#include 

#include 

#define timeout_time 2

#define servport 8080

#define maxdatasize 100

int main(int argc, char *argv);*/

struct sockaddr_in server_addr;

/* timeout */

struct timeval timeout;

socklen_t len = sizeof(timeout);

int result;

int error;

int i;

if (argc < 3)

*snd_buf = '\0';

strcat(snd_buf, argv[2]);

if ((sockfd = socket(af_inet, sock_stream, 0)) == -1)

server_addr.sin_family = af_inet;

server_addr.sin_port = htons(servport);

inet_pton(af_inet, argv[1], &server_addr.sin_addr);

memset(&(server_addr.sin_zero), 0, 8);

/* create the connection by socket 

* means that connect "sockfd" to "server_addr"

*/if (connect(sockfd, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1)

/* send 超時設定,並最多做四次重試 */

timeout.tv_sec = timeout_time;

timeout.tv_usec= 0;

result = setsockopt(sockfd, sol_socket, so_sndtimeo, (char*)&timeout.tv_sec, len);

if (result < 0)

for(i = 0; i < 4; i++)

}else

}printf("send:%s\n", snd_buf);

/* recv 超時設定,並最多做四次重試 */

timeout.tv_sec = timeout_time;

timeout.tv_usec= 0;

result = setsockopt(sockfd, sol_socket, so_rcvtimeo, (char*)&timeout.tv_sec, len);

if (result < 0)

for(i = 0; i < 4; i++)

}else

}rcv_buf[recvbytes] = '\0';

printf("recv:%s\n", rcv_buf);

close(sockfd);

return 0;}

上九,亢龍有悔。

【白話】上九,龍飛到了過高的地方,必將會後悔。

《象》曰:「亢龍有悔」,盈不可久也。

【白話】《象辭》說「龍飛到了過高的地方,必將會後悔」,因為物極必反,事物發展到了盡頭,必將走向自己的反面。

socket 超時設定

在send recv 過程中有時由於網路狀況等原因,收發不能預期進行,而設定收發超時控制 這樣做在linux環境下是不會產生效果的,須如下定義 struct timeval timeout 設定傳送超時 setsockopt socket,sol socket,so sndtimeo,char ti...

socket超時設定

在使用socket程式設計時,肯定會遇到設定超時的問題。有些人可能會認為socket類的setsotimeout sotimeout 方法就是設定超時。其實不然,socket設定超時分為兩種,上面提到為讀寫超時。第一 建立連線的超時設定,如下 socket.connect socketaddress...

socket程式設計中的超時設定示例詳解之二

接前文 二 操作 send,recv 超時 對它們有兩種方式來設定超時,1.將send,recv設定成非阻塞模式,然後用select來設定超時機制,就如上面的connect方式一樣。2.使用setsockopt 函式來設定相應的超時機制。因為前一種方式在connect中重點說明,本節來主要說明第二種...