linux網絡編程相關

一、設置socket收發超時時間

 struct timeval timeout={3,0};//3s
    int ret=setsockopt(sock_fd,SOL_SOCKET,SO_SNDTIMEO,(constchar*)&timeout,sizeof(timeout));
    int ret=setsockopt(sock_fd,SOL_SOCKET,SO_RCVTIMEO,(const char*)&timeout,sizeof(timeout));

    1、struct timeval在time.h中定義爲:


struct timeval
{
__time_t tv_sec;        /* Seconds. */
__suseconds_t tv_usec;  /* Microseconds. */
};

二、獲取和設置socket收發的緩存大小

// 設置接收緩衝區大小
int nRecvBufLen = 32 * 1024; //設置爲32K
setsockopt( sockfd, SOL_SOCKET, SO_RCVBUF, ( const char* )&nRecvBufLen, sizeof( int ) );
//設置發送緩衝區大小
int nSendBufLen = 32*1024; //設置爲32K
setsockopt( sockfd, SOL_SOCKET, SO_SNDBUF, ( const char* )&nSendBufLen, sizeof( int ) );

//獲取接收緩衝區大小
int opt_val;
socklen_t opt_len = sizeof(opt_val);
getsockopt(sockfd, SOL_SOCKET, SO_RCVBUF, &opt_val, &opt_len) ;
//獲取發送緩衝區大小
int opt_val;
socklen_t opt_len = sizeof(opt_val);
getsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, &opt_val, &opt_len) ;


//可以查看:/proc/sys/net/ipv4/tcp_rmem (讀)/proc/sys/net/ipv4/tcp_wmem (寫)
//其中包含三個數字,分別是最小值,默認值和最大內存大小值(以字節爲單位)

三、在tcp通信時

1、在接收數據後轉發給別的模塊去處理時,可以不用知道協議,收到一次就轉發一次,而且是要保持此次連接直到對方關閉連接,目前直到判斷對方取斷開接的方法是通過recv函數的返回值,=0,對方斷開連接;<0,接收出錯;>0收到數據。

2、當接收後需要自己處理時,必須知道協議,通常的做法是接收協議頭,從頭裏知道需要接收的數據長度。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章