發新話題

[分享] Linux網絡編程--8. 套接字選項

Linux網絡編程--8. 套接字選項

有時候我們要控制套接字的行為(如修改緩衝區的大小),這個時候我們就要控制套接字的選項了.  


8.1 getsockopt和setsockopt  

int getsockopt(int sockfd,int level,int optname,void *optval,socklen_t *optlen)
int setsockopt(int sockfd,int level,int optname,const void *optval,socklen_t *optlen)

level指定控制套接字的層次.可以取三種值: 1)SOL_SOCKET:通用套接字選項. 2)IPPROTO_IP:IP選項. 3)IPPROTO_TCP:TCP選項.  
optname指定控制的方式(選項的名稱),我們下面詳細解釋  

optval獲得或者是設置套接字選項.根據選項名稱的數據類型進行轉換  


選項名稱                說明                                    數據類型
========================================================================
                        SOL_SOCKET
------------------------------------------------------------------------
SO_BROADCAST            允許發送廣播數據                        int
SO_DEBUG                允許調試                                int
SO_DONTROUTE            不查找路由                              int
SO_ERROR                獲得套接字錯誤                          int
SO_KEEPALIVE            保持連接                                int
SO_LINGER               延遲關閉連接                            struct linger
SO_OOBINLINE            帶外數據放入正常數據流                  int
SO_RCVBUF               接收緩衝區大小                          int
SO_SNDBUF               發送緩衝區大小                          int
SO_RCVLOWAT             接收緩衝區下限                          int
SO_SNDLOWAT             發送緩衝區下限                          int
SO_RCVTIMEO             接收超時                                struct timeval
SO_SNDTIMEO             發送超時                                struct timeval
SO_REUSERADDR           允許重用本地地址和端口                  int
SO_TYPE                 獲得套接字類型                          int
SO_BSDCOMPAT            與BSD系統兼容                           int
==========================================================================
                        IPPROTO_IP
--------------------------------------------------------------------------
IP_HDRINCL              在數據包中包含IP首部                    int
IP_OPTINOS              IP首部選項                              int
IP_TOS                  服務類型
IP_TTL                  生存時間                                int
==========================================================================
                        IPPRO_TCP
--------------------------------------------------------------------------
TCP_MAXSEG              TCP最大數據段的大小                     int
TCP_NODELAY             不使用Nagle算法                         int
=========================================================================

關於這些選項的詳細情況請查看 Linux Programmer's Manual  

8.2 ioctl  
ioctl可以控制所有的文件描述符的情況,這裡介紹一下控制套接字的選項.  

int ioctl(int fd,int req,...)
  
==========================================================================
                        ioctl的控制選項
--------------------------------------------------------------------------
SIOCATMARK              是否到達帶外標記                        int
FIOASYNC                異步輸入/輸出標誌                       int
FIONREAD                緩衝區可讀的字節數                      int
==========================================================================

詳細的選項請用 man ioctl_list 查看.

TOP

發新話題

本站所有圖文均屬網友發表,僅代表作者的觀點與本站無關,如有侵權請通知版主會盡快刪除。