socket程式設計相關函式

2021-09-02 14:54:37 字數 3950 閱讀 9292

本文旨在整理一下linux下socket程式設計時一些常用的一些理解總結,如有不足希望大家批評指點

linux version 3.10.0-862.14.4.el7.x86_64

gcc version 4.8.5 20150623 (red hat 4.8.5-28) (gcc)

tcp的伺服器端socket基本流程socket->bind->listen->accept->send/recv->closesocket

客戶端基本流程socket->[bind->]->connect->send/recv->closesocket

首先看socket介面定義

int socket (int domain, int type, int protocol);
輸入引數:

domain:位址協議族(一般socket選af_inet

/* address families.  */

#define af_unspec pf_unspec //未指定

#define af_local pf_local // 本地到主機(管道和檔案域)。

#define af_unix pf_unix //只能用於本機內程序之間的通訊

#define af_file pf_file //pf_local的另乙個非標準名稱

#define af_inet pf_inet //ip協議 internetwork: udp, tcp, etc.

#define af_ax25 pf_ax25 //業餘無線電ax.25。

#define af_ipx pf_ipx //novell網路協議

......

type:socket型別(tcp:sock_stream  udp:sock_dgram

enum __socket_type

;

protocol:指定協議(tcp:ipproto_ip udp:ipproto_udp)

/* standard well-defined ip protocols.  */

enum

返回值:

新套接字的檔案描述符,或錯誤返回-1。

函式原型:

int setsockopt (int fd, int level, int optname,

const void *optval, socklen_t optlen)

輸入引數:

fd:標識乙個套介面的描述字。

level:選項定義的層次;支援sol_socket、ipproto_tcp、ipproto_ip和ipproto_ipv6,如果想要在套接字級別上設定選項,就必須把level設定為sol_socket

optname:需設定的選項。option_name可以有哪些取值,這取決於level

sol_socket可選項:

#define so_debug	1 //開啟或關閉除錯資訊。當option_value不等於0時,開啟除錯資訊,否則,關閉除錯資訊

#define so_reuseaddr 2 //開啟或關閉位址復用功能。當option_value不等於0時,開啟,否則,關閉

#define so_type 3 //套介面選項

#define so_error 4 //獲取錯誤狀態

#define so_dontroute 5 //開啟或關閉路由查詢功能。當option_value不等於0時,開啟,否則,關閉。

#define so_broadcast 6 //允許套介面傳送廣播資訊

#define so_sndbuf 7 //指定傳送緩衝區大小

#define so_rcvbuf 8 //接收確定緩衝區大小

#define so_sndbufforce 32 //強制設定傳送快取區大小,可設定不小於2k的任意緩衝區大小

#define so_rcvbufforce 33 //強制設定接收快取區大小,可設定不小於2k的任意緩衝區大小

#define so_keepalive 9 //套接字保活。如果協議是tcp,並且當前的套接字狀態不是偵聽(listen)或關閉(close),那麼,當option_value不是零時,啟用tcp保活定時器,否則關閉保活定時器。

#define so_oobinline 10 //在常規資料流中接收帶外資料

#define so_no_check 11 //開啟或關閉校驗和

#define so_priority 12 //設定在套接字傳送的所有包的協議定義優先權。linux通過這一值來排列網路佇列。這個值在0到6之間(包括0和6),由option_value指定。

#define so_linger 13 //如果選擇此選項, close或 shutdown將等到所有套接字裡排隊的訊息成功傳送或到達延遲時間後》才會返回. 否則, 呼叫將立即返回。

該選項的引數(option_value)是乙個linger結構:

struct linger ;

如果linger.l_onoff值為0(關閉)

#define so_bsdcompat 14 //bsd相容

#define so_reuseport 15 //支援多個程序或者執行緒繫結到同一埠,提高伺服器程式的效能

#ifndef so_passcred /* powerpc only differs in these */

#define so_passcred 16 //啟用或禁用接收scm_credentials控制訊息

#define so_peercred 17 // 返回連線到此套接字的程序的憑據

#define so_rcvlowat 18 //指定套接層傳遞資料到使用者接收時,緩衝區至少應該有多少位元組數

#define so_sndlowat 19 //指定套接層傳遞資料到協議時,緩衝區至少應該有多少位元組數

#define so_rcvtimeo 20 // 指定接收報告錯誤之前的超時值

#define so_sndtimeo 21 // 指定傳送報告錯誤之前的超時值

#endif

optval:指標,指向存放選項待設定的新值的緩衝區。

optlen:optval緩衝區長度。

返回值:

成功返回0,錯誤返回-1

函式原型:

int bind (int fd, const_sockaddr_arg addr, socklen_t len)
輸入引數:

fd:標識未**套介面的描述字。

addr:賦予套介面的位址

len:addr的長度。可以用sizeof操作符獲得

返回值:

成功返回0,失敗返回-1.

函式原型:

int listen (int fd, int n)
入引數:

fd:套介面的描述字。

n: listen的第二個引數並不是用來限制程式的最大連線數的。

而是tcp模組允許的已完成三次握手過程(tcp模組完成)但還沒來得及被應用程式accept的最大鏈結數.

返回值:

成功返回0,錯誤返回-1

socket網路程式設計的相關函式

1.wsastartup函式 用於初始化winsock 宣告 intwsastarup word wversionrequested,lpwsadata lpwsadata 引數 wversionrequested 要求使用winsock的最低版本號 lpwsadata winsock的詳細資料 返...

解析socket程式設計的相關函式

1.什麼是套接字 乙個完整的網路通訊需要乙個五元組來標識 協議 本地位址 本地埠號 遠端位址 遠端埠號。tcp用主機的ip位址加上主機上的埠號作為tcp連線的端點,這種端點就叫做套接字 流式套接字 sock stream tcp the transmission control protocol 協...

socket相關函式

一 標頭檔案 sys socket.h 函式和資料結構定義 netinet in.h ip v4和 ip v6 相關協議簇需要的資訊 sys un.h unix機器間通訊的相關資訊 不涉及 arpa inet.h 處理數字從作業系統位元組序到網路位元組序 netdb.h 對映服務到ip位址 不涉及 ...