Tuesday, January 25, 2011

Linux下的網絡編程7

轉:http://cyuyanbiancheng.blog.hexun.com.tw/57130486_d.html

c語言學習: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 查看

No comments:

Post a Comment