Linux C 網絡_創建套接字描述符函數

Linux 使用 socket 函數來創建一個套接字描述符。

#include <sys/types.h>
#include <sys/socket.h>
int socket(int domain, int type, int protocol);

如果函數調用成功,則返回套接字的描述符,是一個正整數,如果函數調用失敗則返回 -1。

對函數中的各個參數描述如下:

  • domain:套接字的協議族,其支持的類型說明如表所示,socket 函數可以支持多種網絡協議,在使用時必須指定當前使用的協議。

socket 函數支持的協議族

協議族名稱 描述
AF_UNIX,AF_LOCAL 本地交互協議
AF_INET IPv4 協議
AF_INET6 IPv6 協議
AF_IPX IPX-Novell 協議
AF_NETLINK 內核接口設備協議
AF_X25 ITU-T X.25/ISO-8208 協議
AF_AX25 業餘無線電 AX.25 協議
AF_ATMPVC 原始 ATM 接入協議
AF_APPLETALK 蘋果的 Appletalk 協議
AF_PACKET 底層數據包接口
  • type:用於指定當前的套接字類型,socket 函數支持的套接字類型包括 SOCK_STREAM(數據流)、SOCK_DGRAM(數據報)、SOCK_SEQPACKET(順序數據報)、SOCK_RAW(原始套接字)、SOCK_RDM(可靠傳遞消息)、SOCK_PACKET(數據包)。
  • protocol:除了在使用原始套接字以外,(通常情況下設置爲0,以表示使用默認的協議。在 Linux 系統中創建一個套接字時會在內核中創建一個套接字數據結構,然後返回一個套接字描述符標識這個套接字數據結構。這個套接字數據結構包含連接的各種信息,如對方地址、 TCP 狀態以及發送接收緩衝區等。TCP 協議根據這個套接字數據結構的內容來控制這條連接。

【例1】使用 socket 函數創建套接字
應用代碼調用 socket 函數來建立一個套接字,設定套接字使用的協議是 AF_INET,套接字類型爲 STREAM,如果創建成功,則返回對應的套接字描述符。

實例的應用代碼如下:

#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>

int main(int argc,char *argv[])
{
    int sockfd;  //定義套接口描述符
    if(sockfd = socket(AF_INET,SOCK_STREAM,0) < 0)  //建立一個 socket
    {
        printf("創建套接字失敗。\n");
        return 1;
    }
    else  //socket 創建成功
    {
        printf("套接字的ID是:%d\n", sockfd);
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章