Berkeley套接字

柏克萊插座（英語：Internet Berkeley sockets） ，又稱為BSD 插座(BSD sockets)是一種應用程式介面（API），用於網路插座（ socket）與Unix域插座，包括了一個用C語言寫成的應用程式開發庫，主要用於實現行程間通訊，在電腦網路通訊方面被廣泛使用。
Berkeley插座（也作BSD插座應用程式介面）剛開始是4.2BSD Unix作業系統（於1983發布）的一套應用程式介面。然而，由於AT&T的專利保護著UNIX，所以只有在1989年柏克萊大學才能自由地發布自己的作業系統和網路庫。
Berkeley插座應用程式介面形成了事實上的網路插座的標準精髓。 大多數其他的程式語言使用與這套用C語言寫成的應用程式介面 類似的埠。 這套應用程式介面也被用於Unix域插座（Unix domain sockets），後者可以在單機上為行程間通訊（IPC）的埠。
這種基於流的傳輸層埠（TLI）為插座應用程式介面提供了一種選擇。 不過，最近提供TLI應用程式介面的的系統同時也提供Berkeley插座應用程式介面。

Berkeley插座埠

Berkeley插座埠，一個應用程式介面（API），使用一個Internet插座的概念，使主機間或者一台電腦上的行程間可以通訊。 它可以在很多不同的輸入/輸出裝置和驅動之上執行，儘管這有賴於作業系統的具體實現。 埠實現用於TCP/IP協定，因此它是維持Internet的基本技術之一。 它是由加利福尼亞的柏克萊大學開發，最初用於Unix系統。 如今，所有的現代作業系統都有一些源於Berkeley插座埠的實現，它已成為連接Internet的標準埠。
插座埠的接入有三個不同的級別，最基礎的也是最有效的就是raw socket級別接入。 很少的應用程式需要在外向通訊控制的這個級別接入，所以raw socket級別是只為了用於開發電腦Internet相關技術的。 最近幾年，大多數的作業系統已經實現了對它的全方位支援，包括Windows XP。

getsockname() 和 getpeername ()

int getsockname (SOCKET s, struct sockaddr *name, int* namelen);
getsockname函式取得已繫結（可能是未呼叫bind的系統自動繫結）的套埠本地協定位址。
int getpeername (SOCKET s, struct sockaddr *name, int* namelen);
getpeername函式獲得與指定套埠連接的遠端資訊（IP:PORT）。

inet_pton與inet_ntop

inet_pton與inet_ntop兩個函式，在ASCII字元描述的IP位址與網路位元組序的4位元組IP位址之間轉換。 字母"n"與"p"，分別是numerical與presentation的縮寫。

協定和位址

插座API是Unix網路的通用埠，允許使用各種網路協定和位址。
下面列出了一些例子，在現在的 Linux 和 BSD 中一般都已經實現了。 
PF_LOCAL, PF_UNIX, PF_FILE
                Local to host (pipes and file-domain)
PF_INET         IP protocol family
PF_AX25         Amateur Radio AX.25
PF_IPX          Novell Internet Protocol
PF_APPLETALK    Appletalk DDP
PF_NETROM       Amateur radio NetROM
PF_BRIDGE       Multiprotocol bridge
PF_ATMPVC       ATM PVCs
PF_X25          Reserved for X.25 project
PF_INET6        IP version 6
PF_ROSE         Amateur Radio X.25 PLP
PF_DECnet       Reserved for DECnet project
PF_NETBEUI      Reserved for 802.2LLC project
PF_SECURITY     Security callback pseudo AF
PF_KEY          PF_KEY key management API
PF_NETLINK, PF_ROUTE
                routing API
PF_PACKET       Packet family
PF_ASH          Ash
PF_ECONET       Acorn Econet
PF_ATMSVC       ATM SVCs
PF_SNA          Linux SNA Project
PF_IRDA         IRDA sockets
PF_PPPOX        PPPoX sockets
PF_WANPIPE      Wanpipe API sockets
PF_BLUETOOTH    Bluetooth sockets
socket的通用address描述結構sockaddr是一個16位元組大小的結構（2+14），sa_family可以認為是socket address family的縮寫。另外的14位元組是用來描述位址。當指定sa_family=AF_INET之後，sa_data的形式也就被固定了下來：最前端的2位元組用於記錄16位元的埠，緊接著的4位元組用於記錄32位元的IP位址，最後的8位元組清空為零。
struct sockaddr{
    unsigned short sa_family;
    char sa_data[14];};struct sockaddr_in //means socket address internet{
    unsigned short sin_family; //sin means socket (address) internet
    unsigned short sin_port;
    struct in_addr sin_addr;
    char sin_zero[8];};struct in_addr{
    unsigned long s_addr; // means source address};

使用UDP的伺服器客戶機舉例

用戶資料報協定（UDP）是一個不保證正確傳輸的無連接協定。 UDP封包可能會亂序到達，多次到達或者直接遺失。但是設計的負載比TCP小。 
UDP位址空間，也即是UDP埠，和TCP埠是沒有關係的。

客戶機

用UDP封包傳送一個"Hello World!" 給位址127.0.0.1（迴環位址），埠 7654 。
#include <stdlib.h>#include <stdio.h>#include <errno.h>#include <string.h>#include <sys/socket.h>#include <sys/types.h>#include <netinet/in.h>#include <unistd.h> /* for close() for socket */
 
int main(int argc, char *argv[]){
  int sock;
  struct sockaddr_in sa;
  int bytes_sent, buffer_length;
  char buffer[200];
 
  buffer_length = snprintf(buffer, sizeof(buffer), "Hello World!");
 
  sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
  if (-1 == sock) /* if socket failed to initialize, exit */
    {
      printf("Error Creating Socket");
      exit(EXIT_FAILURE);
    }
 
  memset(&sa, 0, sizeof(sa));
  sa.sin_family = AF_INET;
  sa.sin_addr.s_addr = htonl(0x7F000001);
  sa.sin_port = htons(7654);
 
  bytes_sent = sendto(sock, buffer, buffer_length, 0,(struct sockaddr*)&sa, sizeof (struct sockaddr_in));
  if (bytes_sent < 0)
    printf("Error sending packet: %s\n", strerror(errno));
 
  close(sock); /* close the socket */
  return 0;}
buffer指定要傳送資料的指標,  buffer_length指定快取內容的大小。
同樣功能的Python實現：
import socketport=7654host='localhost's=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)s.sendto(b'Hello World!',(host,port))