Linux通訊端編程之通訊端選項

來源:互聯網
上載者:User

通訊端機制提供了兩個通訊端選項介面來控制通訊端的行為。一個介面用來設定選項,另外一個介面用來允許我們請求選項的狀態。我們可以獲得以及設定三種類型的選項。

1.通用選項,可以工作在所有的通訊端類型。

2.在通訊端層次上面進行管理的選項,但是依賴底部協議的支援。

3.和每個協議相關的協議選項。

Single UNIX Specification 只定義了通訊端層的選項(上面所提到的前面兩項)

我們可以通過setsockopt函數來設定通訊端選項。

#include <sys/socket.h>

int setsockopt(int sockfd, int level, int option, const void *val, socklen_t len);

返回:如果成功返回0,如果錯誤返回1。

參數level用來分辨option所應用的協議。如果option是通用通訊端層次的選項,那麼level設定成SOL_SOCKET。否則level設定成控制option的協議號。例如IPPROTO_TCP用於TCP選項,以及IPPROTO_IP用於IP選項。下面的表中就列出了Single UNIX Specification定義的通用的通訊端層次的選項。

     通訊端選項

+-------------------------------------------------------------------------------------------------------------+

|    Option     | Type of val argument |                             Description                              |

|---------------+----------------------+----------------------------------------------------------------------|

| SO_ACCEPTCONN | int                  | 返回通訊端是否啟用用於偵聽(只用於getsockopt)。                     |

|---------------+----------------------+----------------------------------------------------------------------|

| SO_BROADCAST  | int                  | 如果*val非0那麼廣播資料報。                                          |

|---------------+----------------------+----------------------------------------------------------------------|

| SO_DEBUG      | int                  | 如果*val非0那麼啟用網路驅動的調試。                                  |

|---------------+----------------------+----------------------------------------------------------------------|

| SO_DONTROUTE  | int                  | 如果*val非0,那麼忽略通常的路由。                                    |

|---------------+----------------------+----------------------------------------------------------------------|

| SO_ERROR      | int                  | 返回並且清除提交的通訊端錯誤(只用於getsockopt)。                   |

|---------------+----------------------+----------------------------------------------------------------------|

| SO_KEEPALIVE  | int                  | 如果*val非0,那麼啟用定期活動的訊息。                                |

|---------------+----------------------+----------------------------------------------------------------------|

| SO_LINGER     | struct linger        | 如果有未發送的訊息存在以及通訊端關閉,那麼做延遲。                   |

|---------------+----------------------+----------------------------------------------------------------------|

| SO_OOBINLINE  | int                  | 如果*val非0,那麼將帶外資料嵌入到正常資料中。                        |

|---------------+----------------------+----------------------------------------------------------------------|

| SO_RCVBUF     | int                  | 接收緩衝的位元組大小。                                                 |

|---------------+----------------------+----------------------------------------------------------------------|

| SO_RCVLOWAT   | int                  | receive調用返回的最小資料位元組。                                      |

|---------------+----------------------+----------------------------------------------------------------------|

| SO_RCVTIMEO   | struct timeval       | 通訊端receive調用的逾時值。                                          |

|---------------+----------------------+----------------------------------------------------------------------|

| SO_REUSEADDR  | int                  | 如果*val非0,那麼重複使用bind的地址。                                |

|---------------+----------------------+----------------------------------------------------------------------|

| SO_SNDBUF     | int                  | send緩衝中的位元組大小。                                               |

|---------------+----------------------+----------------------------------------------------------------------|

| SO_SNDLOWAT   | int                  | 一次send調用傳輸的最小資料位元組量。                                   |

|---------------+----------------------+----------------------------------------------------------------------|

| SO_SNDTIMEO   | struct timeval       | 一個通訊端send調用的逾時值。                                         |

|---------------+----------------------+----------------------------------------------------------------------|

| SO_TYPE       | int                  | 辨別通訊端類型(只在getsockopt中)。                                 |

+-------------------------------------------------------------------------------------------------------------+

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.