linux socket程式設計主要函式功能說明

2021-06-16 11:11:29 字數 1940 閱讀 3626

伺服器端:

int socket(int family,int type,int protocol);

引數說明:

family:af_inet,af_inet6,af_route,af_key,af_local

type:sock_stream,sock_dgm,sock_seqpacket,sock_raw

protocol:ipproto_tcp,ipproto_udp,ipprot_sctp

功能說明:

程序中呼叫此函式後核心將完成socket套接字的檔案描述符建立

in bind(int sockfd,const struct sockaddr *myaddr,socklen_t addrlen);

功能說明:

將伺服器監聽ip和埠等資訊新增到socket描述符中,若未指定ip位址或埠系統核心將使用預設ip接收埠或乙個臨時埠號作為監聽埠

int listen(int sockfd,int blackflog);

核心中工作原理:

1.核心建立建立已完成連線佇列(established)和未完成連線佇列(syn_rcvd),維護所有可以端對伺服器端的請求;其中已

完成連線佇列中存放已經完成客戶端與伺服器端三次握手請求的客戶端請求資訊。在三次握手完成之後,在伺服器呼叫accept

之前客戶端到達伺服器端的資料,為隊列為已連線套接字分配的接收資料快取區中,接收的資料大小不能超過此快取區的大小;

未完成連線佇列中存放伺服器端與客戶端還未完成三次握手的連線套接字

2.建立未完成連線佇列將未完成伺服器端與客戶端的三次握手過程的套接字存放其中,直到完成為止

3.將完成三次握手過程的套接字從未完成佇列轉移到完成佇列中(在三次握手正常完成的前提下,套接字在未完成佇列中都存在乙個rtt時間限制)

4.接收完成三次握手過程,且在為呼叫accept之間客戶端發來的資料,資料大小小於分配的快取區大小

int accept(int sockfd,sockadd *childaddr,socklen_t *addrlen);

功能說明:

從完成連線佇列頭部返回下乙個已經完成的連線套接字,如果已完成連線隊列為空,那麼程序將進入睡眠狀態(當套接字為阻塞方式時),直到有完成連線的套接字來到。

int close(int sockfd);

客服端:

int socket(int family,int type,int protocol);

int connect(int sockfd,const sockaddr *serveraddr,socklen_t addrlen);

返回錯誤說明:

1.三次握手中,伺服器端未完成佇列已經達到最大值,不允許客服端連入(呼叫connect時,客服端第一次傳送syn分節到伺服器端進行連線請求,若此時伺服器端未完成連線佇列滿時,伺服器端將丟失客服端的syn分節請求,客服端在6s後,未收到伺服器端的syn分節請求的回應,將再次傳送乙個syn分節,若仍然無回應則等待24s後再次傳送乙個,若總共等75後未收到回應則返回etimedout錯誤);

2.客服端在建立三次握手時傳送的syn分節中指定的伺服器端位址在通過某個路由器時引發(distination unreachable)位址不可到達的icmp錯誤(軟錯誤soft error),當客服端收到路由器發回的此資訊後核心將儲存該資訊,並按照第一種情況中所述的時間間隔傳送syn分節,若在規定的時間(bsd規定的75s)後仍未收到伺服器端回應,則將核心儲存的該資訊(及icmp錯誤)作為ehostunreach或enetunreach錯誤返回給呼叫程序;

3.當客服端傳送syn分節請求連線時,若伺服器未開啟相應埠進行監聽,伺服器端將返回rst,並立即向程序返回econnrefused錯誤。產生rst錯誤的三個條件是:1.伺服器端收到客服端對其某埠的請求,但是該埠未處於監聽狀態;2.tcp想取消乙個已經連線的客服端請求;3.tcp接收到乙個根本不存在的連線上的分節。

int close(int sockfd);

linux socket 程式設計

兩段程式 可用於開發板和主機之間的資料傳輸,很管用!file client.c檔案傳輸客戶端程式示例 本檔案是客戶機的 include for sockaddr in include for socket include for socket include for printf include f...

linux socket程式設計

雙休日無聊透頂,看了四五集 反恐24小時 實在不想看了,於是就想搞linux的socket programming來玩玩,前期資料都準備好 早就想寫個看看了。首先,寫個簡單的client端的程式 呵,其實是copy!server端用的是網上當的乙個除錯工具 一開始用的是以前用過的乙個多執行緒執行的介...

Linux Socket程式設計 執行緒

本章主要列舉伺服器程式的各種網路模型,示例程式以及效能對比後面再寫。一 分類依據。伺服器的網路模型分類主要依據以下幾點 1 是否阻塞方式處理請求,是否多路復用,使用哪種多路復用函式 2 是否多執行緒,多執行緒間如何組織 3 是否多程序,多程序的切入點一般都是accept函式前 二 分類。首先根據是否...