linux下socket常用函式

2021-07-09 11:57:55 字數 3350 閱讀 1773

1、setprotoent(開啟網路協議的資料檔案)

相關函式  getprotobyname, getprotobynumber, endprotoent

表頭檔案  #include

定義函式  void setprotoent (int stayopen);

函式說明  

setprotoent()用來開啟/etc/protocols,如果引數stayopen值

非零,則接下來的

getprotobyname()或getprotobynumber()將不會自動關閉此檔案。

2、setservent(開啟主機網路服務的資料檔案)

相關函式  getservent, getservbyname, getservbyport, endservent

表頭檔案  #include < netdb.h >

定義函式  void setservent (int stayopen);

函式說明  

setservent()用來開啟/etc/services,如果引數stayopen值非零,則接下來的getservbyname()或getservbyport()將補回自動關閉檔案。

3、setsockopt(設定socket狀態)

相關函式  getsockopt

表頭檔案  #include

#include

定義函式  int setsockopt(int sfd,int level,int optname,const void * optval,,socklen_toptlen);

函式說明  

setsockopt()用來設定引數sfd所指定的socket狀態。

引數level代表欲設定的網路層,一般設成sol_socket以訪問socket層。

引數optname代表欲設定的選項,有下列幾種數值:

so_debug 

開啟或關閉排錯模式

so_reuseaddr 

允許在bind()過程中本地位址可重複使用

so_type  

返回socket形態。

so_error 

返回socket已發生的錯誤原因

so_dontroute

送出的資料報不要利用路由裝置來傳輸。

so_broadcast 

使用廣播方式傳送

so_sndbuf 

設定送出的暫存區大小

so_rcvbuf 

設定接收的暫存區大小

so_keepalive 定期確定連線是否已終止。

so_oobinline 當接收到oob 資料時會馬上送至標準輸入裝置

so_linger 確保資料安全且可靠的傳送出去。

引數  optval代表欲設定的值,引數optlen則為optval的長度。

返回值  成功則返回0,若有錯誤則返回-1,錯誤原因存於errno。

附加說明  ebadf 引數s並非合法的socket處理**

enotsock 引數s為一檔案描述詞,非socket

enoprotoopt 引數optname指定的選項不正確。

efault 引數optval指標指向無法訪問的記憶體空間。

範例  參考getsockopt()。

4、shutdown(終止socket通訊)

相關函式  socket,connect

表頭檔案  #include

定義函式  int shutdown(int s,int how);

函式說明  

shutdown()用來終止引數s所指定的socket連線。引數s是連線中的socket處理**,引數how有下列幾種情況:

how=0 終止讀取操作。

how=1 終止傳送操作

how=2 終止讀取及傳送操作

返回值  成功則返回0,失敗返回-1,錯誤原因存於errno。

錯誤**  ebadf 引數s不是有效的socket處理**

enotsock 引數s為一檔案描述詞,非socket

enotconn 引數s指定的socket並未連線

5、socket(建立乙個socket通訊)

相關函式  accept,bind,connect,listen

表頭檔案  #include

#include

定義函式  int socket(int domain,int type,int protocol);

函式說明  

socket()用來建立乙個新的socket,也就是向系統註冊,通知系統建立一通訊埠。 引數

domain 

指定使用何種的位址型別,完整的定義在/usr/include/bits/socket.h 內,底下是常見的協議:

pf_unix/pf_local/af_unix/af_local unix 程序通訊協議

pf_inet?af_inet ipv4網路協議

pf_inet6/af_inet6 ipv6 網路協議

pf_ipx/af_ipx ipx-novell協議

pf_netlink/af_netlink 核心使用者介面裝置

pf_x25/af_x25 itu-t x.25/iso-8208 協議

pf_ax25/af_ax25 業餘無線ax.25協議

pf_atmpvc/af_atmpvc 訪問原始atm pvcs

pf_packet/af_packet 初級封包介面

引數  

type

有下列幾種數值:

sock_stream 提供雙向連續且可信賴的資料流,即tcp。支援

oob 機制,在所有資料傳送前必須使用connect()來建立連線狀態。

sock_dgram 使用不連續不可信賴的資料報連線

sock_seqpacket 提供連續可信賴的資料報連線

sock_raw 提供原始網路協議訪問

sock_rdm 提供可信賴的資料報連線

sock_packet 提供和網路驅動程式直接通訊。

protocol

用來指定socket所使用的傳輸協議編號,通常此參考不用管它,設為0即可。

返回值  成功則返回socket處理**,失敗返回-1。

錯誤**  eprotonosupport 引數domain指定的型別不支援引數type或protocol指定的協議

enfile 核心記憶體不足,無法建立新的socket結構

emfile 程序檔案表溢位,無法再建立新的socket

eaccess 許可權不足,無法建立type或protocol指定的協議

enobufs/enomem 記憶體不足

einval 引數domain/type/protocol不合法

範例  參考connect()。

linux下socket 程式設計常用標頭檔案

sys types.h 資料型別定義 sys socket.h 提供socket函式及資料結構 netinet in.h 定義資料結構sockaddr in netdb.h 提供設定及獲取網域名稱的函式 sys ioctl.h 提供對i o控制的函式 sys poll.h 提供socket等待測試機...

Linux下常用的C C 開源Socket庫

1.linux socket programming in c 2.ace ace採用ace os適配層遮蔽各種不同的 複雜繁瑣的作業系統api。ace是乙個大型的中介軟體產品,20萬行左右,過於巨集大,一堆的設計模式,架構了一層又一層。它龐大 複雜,適合大型專案。開源 免費,不依賴第三方庫。使用的...

Linux下常用的C C 開源Socket庫

1.linux socket programming in c 2.ace ace採用ace os適配層遮蔽各種不同的 複雜繁瑣的作業系統api。ace是乙個大型的中介軟體產品,20萬行左右,過於巨集大,一堆的設計模式,架構了一層又一層。它龐大 複雜,適合大型專案。開源 免費,不依賴第三方庫。使用的...