Changes between Version 17 and Version 18 of wade/linuxProgramming


Ignore:
Timestamp:
Jan 20, 2009, 3:29:19 PM (15 years ago)
Author:
wade
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • wade/linuxProgramming

    v17 v18  
    2828}}}
    2929== 網路程序連線流程 ==
    30  * Server:socket → blind → listen → accept
    31  * Client:socket → connect
     30 * Server:socket → blind → listen → accept
     31 * Client:socket → connect
    32321. socket:
    33    * man socket
    3433   * socket 可以視為管線 (pipe) 概念的延伸,只是它不止可以在本機電腦,還可以透過網路來傳輸資料。它與管線最大的不同在於它將程序區分為 server 與 client,可以進行一對一或多對一的資訊傳遞服務。
    35    * socket() 會在 linux 上產生一個檔案名稱,通常存在 /tmp 中,檔案名稱也就是服務的辨識子埠號 (port #),負責將連接請求繞到正確的伺服器處理程序。[wiki:wade/tcp_port_list]
     34   * socket() 會在 linux 上產生一個檔案名稱,通常存在 /tmp 中,檔案名稱也就是服務的辨識子埠號 (port #),負責將連接請求繞到正確的伺服器處理程序。[wiki:wade/tcp_port_list]。
     35   * 範例:
     36   {{{
     37   int socket ( int domain, int type, int protocol );
     38   -- domain:
     39      PF_UNIX, PF_LOCAL  local connection    用在本機內資料傳輸。
     40        資料型態:#include <sys/un.h>
     41        struct sockaddr_un{
     42          sa_family_t  sun_family;  /*AF_UNIX*/
     43          char         sun_path[];  /*pathname*/
     44        };
     45      PF_INET IPv4       Internet protocols  IP 的通訊協定。
     46        資料型態:#include <netinet/in.h>
     47        struct sockaddr_in{
     48          short int       sin_family;    /*AF_INET*/
     49          unsigned short  int sin_port;  /*Port number*/
     50          struct in_addr  sin_addr;      /*Internet address*/
     51        };
     52   -- type:
     53      SOCK_STREAM  TCP 提供循序、雙向、可確保完整性的資料傳輸。
     54      SOCK_DGRAM   UDP 提供不需連接,不確保完整性的資料傳輸。
     55   -- protocol:
     56      參考 /etc/protocols ,常用 0 。
     57   }}}
    36582. blind:
    3759   * socket 命名必須透過 blind() 這個 system call 。而 server 就在這具名的 socket 上等待 client 的連結請求。