2021年10月2日 星期六

Socket Options

設定 socket 選項 (options) 功能。

int getsockopt(int fd,
    int level, int optname, void *optval, int *optlen);
int setsockopt(int fd,
    int level, int optname, const void *optval, int optlen);

成功回傳 0、失敗回傳 -1。

  • level:處理選項的 layer,例如 SOL_SOCKET、IPPROTO_IP。
  • optname:是要設定或取得的選項,透過值 optval 和長度 optlen。取得時,optlen 給 optval 長度,並回傳取得的 optval 長度。

有些選項是唯讀的,只能 getsockopt()。有些選項是唯寫的,只能 setsockopt()。

TLPI §61.11,accept() 會繼承 listen() socket 的選項。dup() 和 fork() 也會

SOL_SOCKET SO_TYPE 唯讀 取得 socket 類型 int SOCK_STREAM、SOCK_DGRAM

multicasting 用在 family AF_INET (?AF_INET6)、type 是 SOCK_DGRAM 或 SOCK_RAW 的 socket。常用在 SOCK_DGRAM,如果用在 routing daemon 可能需要 SOCK_RAW。level 是 IPPROTO_IP,有關的選項包括:


                        setsockopt()            getsockopt()
IP_MULTICAST_LOOP           yes                     yes
IP_MULTICAST_TTL            yes                     yes
IP_MULTICAST_IF             yes                     yes
IP_ADD_MEMBERSHIP           yes                      no
IP_DROP_MEMBERSHIP          yes                      no

參考

  1. https://www.tldp.org/HOWTO/Multicast-HOWTO-6.html
  2. TLPI §61.9  

Stevens et al., 2004

tcp(7), udp(7), ip(7). scoket(7), unix(7) manual pages

沒有留言:

張貼留言

SIP header Via

所有 SIP 訊息 都要有 Via,縮寫 v。一開始的 UAC 和後續途經的每個 proxy 都會疊加一個 Via 放傳送的位址,依序作為回應的路徑。 格式 sent-protocol sent-by [ ;branch= branch ][ ; 參數 ...] s...