Skip to content

linux socket programming(一): 什麼是 socket & 創建一個新的 socket

davidlei

socket programming

socket 本質上是一種 IPC(Inter-Process Communication)技術,用於兩個或多個 process 之間進行資料交換。

在網路領域,socket 著重的是不同主機上的 process 之間如何互相傳遞資料,而不只是同一台機器上的 IPC。

這篇筆記會簡單介紹 Linux 提供的 socket API,並用兩個範例說明如何分別透過 TCP 和 UDP 協定傳輸資料。

本文章所使用的環境

寫 socket 相關的程式時,需要先引入:

#include <arpa/inet.h>  // sockaddr 相關
#include <sys/socket.h>

socket

int socket(int domain, int type, int protocol)

domain

定義要建立哪種類型的 socket,常用的有:

詳細選項可以參考 socket man page

type

socket 傳輸資料的方式(communication semantics):

protocol

通訊協定的號碼,通常填 0,kernel 會根據前兩個參數自動選擇合適的協定。

/etc/protocols 中可以看到 Linux 支援的所有協定,詳細說明請參考 protocol man page

Return Value

建立成功後會回傳該 socket 的檔案描述符(socket file descriptor),後續所有操作都透過這個值進行。若建立失敗則回傳 -1(INVALID_SOCKET)。

檔案描述符是什麼?

參考資料:

建立 socket example

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

int main() {
    // AF_INET = IPv4
    // SOCK_DGRAM = UDP
    int socket_fd = socket(AF_INET, SOCK_DGRAM, 0);
    
    // 檢查是否建立成功
    if (socket_fd < 0) {
        printf("Fail to create a socket.");
    }
    
    // 根據 socker_fd 關閉剛剛創立的 socket
    close(socket_fd);
    return 0;
}

完整專案請參考 GitHub

Edit this post
Previous
linux socket programming(二): socket 中用來存放地址的 sockaddr
Next
jserv - linux 核心設計 第一周題目二解題紀錄