1. 程式人生 > >TCP/IP 學習 --- 4(linux網絡基礎api)

TCP/IP 學習 --- 4(linux網絡基礎api)

close dst 緊急 -s udp 文件描述符 失敗 消息 con

1 sockaddr_in、sockaddr_in6和sockadd_un等都可以強制轉換為sockaddr.

2 IP地址是電分十進制形式的字符串,但是在網絡中使用的是unsigned int類型的數才能使用。

  1. in_addr_t inet_addr(const char* strptr); 返回的是ipv4的usigned int類型的地址。
  2. int inet_aton(const char* cp, struct in_addr* inp); 如果成功返回非零,不成功返回零
  3. char* inet_ntoa();如果失敗返回NULL,如果成功返回正確的點分十進制地址。
  4. int net_pton(int af, const char* src, void* dst); 點分十進制轉換成網絡地址。適用於ipv4和ipv6
  5. const char* inet_ntop(int af, const void* src, char* dst, socklen_t cnt); 網絡地址轉換成點分十進制地址。適用於ipv4和ipv6

3 函數listen, 第二個參數backlog,表示內核監聽隊列的最大長度,如果超過了設定值+1的數量(在windows下測試是超過設定值的連接,就會連接不上),則服務器將不受理新的客戶連接。只要不accept,內核隊列中的監聽到的socket數量不會減少.

4 close: 當我們關閉連接時,使用close,其實只是將文件描述符的引用計數減1,一次fork會使父進程中打開的問見描述符引用計數加1,所以在這種情況下我們應該對父子進程中的文件描述符都執行一次close.如果想要直接終止連接,可以使用shutdown函數,參數howto的取值分別為shut_rd, shut_wr和shut_rdwr。

5 msg_oob數據。send和recv函數可以設置消息選項,當設置為緊急數據時(msg_oob),只能有一個字節緊急數據,如果發送的消息是多字節消息,只有最有一個字節是緊急數據。

6 udp發送數據使用sendmsg, 接收數據使用recvmsg,跟send和recv差不多,只不過是socket地址結構的參數。這兩個函數也可以用於tcp,用於tcp時,將後面兩個參數設置為null即可。

TCP/IP 學習 --- 4(linux網絡基礎api)