基本socket api

來源:互聯網
上載者:User

標籤:style   blog   color   資料   div   log   ad   伺服器   

 

socket函數,為了執行網路I/O,一個進程必須做的第一件事就是調用socket函數,並且指定通訊協定類型。

#include<sys/socket.h>int socket (int family, int type, int protocol); //成功返回非負描述符,出錯-1

其中family參數指明了協議族,AF_INET(IPv4), AF_INET6(IPv6);type參數指明通訊端的類型,SOCK_STREAM(位元組流) , SOCK_DGRAM(資料包)。

 

connet函數,TCP客戶用connet函數來建立與TCP伺服器的串連。

#include<sys/socket.h>int connect(int sockfd, const struct sockadd* servaddr, socklet_addrlen);//成功返回0,出錯-1

sockfd是由socket函數返回的通訊端描述符,第二,第三個參數分別是一個指向通訊端地址結構的指標和該結構的大小。servaddr必須包含由伺服器的ip地址和連接埠號碼。

客戶在調用connect函數前不必非得調用bind函數,核心會確定源ip,並選擇一個臨時連接埠。

 

bind函數,bind函數把一個本地地址協議賦予一個通訊端。

#include<sys/socket.h>int bind(int sockfd,const struct sockaddr* myaddr,socklen_t addrlen);//成功返回0,出錯-1

myaddr是一個指向特定協議的地址結構的指標,啊ddr了addrlen是該地址結構的長度。對於TCP,調用bind函數可以制定ip地址,連接埠號碼。

 

listen函數,僅由TCP伺服器調用,當socket函數建立一個通訊端的時候,預設建立出的是一個主動通訊端,也就是說是一個將調用connect發起串連的客戶通訊端。listen函數把一個未串連的通訊端轉換成一個被動通訊端,指示核心應接受指向該通訊端的串連請求。

#include<sys/socket.h>int listen(int sockfd, int backlog);// 成功返回0, 出錯-1

backlog為未完成串連隊列與完成但未被應用進程接受隊列長度之和。

 

accept函數,由TCP伺服器調用,用於從已完成串連隊列頭返回下一個已完成的串連,如果已完成串連隊列為空白,那麼進程將阻塞。

#include<sys/socket.h>int accept(int sockfd, struct sockaddr*cliaddr, socklen_t *addrlen)//成功非負描述字,出錯-1

參數cliaddr和addrlen用來返回已串連的對端進程的協議地址。如果accept成功,那麼傳回值是由核心自動產生的一個全新通訊端,代表與客戶的TCP串連。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.