《Unix環境高階程式設計》讀書筆記之套接字 二

2021-08-14 12:19:50 字數 3250 閱讀 7461

獲得網路名字和網路編號:讀的資料庫檔案是/etc/networks

#include 

struct netent * getnetent(void);

網路號按網路位元組序返回。位址型別為 af_xx 的位址族常量。

結構體:

struct netent;

返回值:

功能:從資料庫檔案讀與網路名匹配乙個結構體,並返回。

網路號按網路位元組序返回。位址型別為 af_xx 的位址族常量。

返回值:

#include 

void setservnet(int stayopen);

void endservnet(void);

+ 功能:

+ `setservnet`開啟與資料庫的連線,並且設定下乙個入口為第乙個入口。如果`stayopen`是非0的話,在呼叫`getnet*`函式之前,與資料庫的連線不會關閉。

+ `endservnet`關閉與資料庫的連線。

將主機名(ip位址)和服務名(埠)對映到乙個struct sockaddr位址結構

#include 

#include

#include

int getaddrinfo(const

char *node, const

char *service,const

struct addrinfo *hints, struct addrinfo **res);

addrinfo結構體:鍊錶結構

struct addrinfo;

引數:hints:用來篩選符合特定條件的位址,hints是乙個用來過濾的模板,除了ai_family, ai_flags, ai_protocol, ai_socktype可以設定之外其他的都設定為0或者空指標。

返回值:

freeaddrinfo:釋放addrinfo結構;

gai_strerror:將getaddrinfo的錯誤碼轉換成為錯誤訊息。

#include 

#include

int getnameinfo(const

struct sockaddr *sa, socklen_t salen, char *host, size_t hostlen, char* serv, size_t servlen, int flags);

引數:返回值:

#include 

int bind(int sockfd, const

struct sockaddr *addr, socklen_t len);

引數:

len:位址長度

返回值:

對於網際網路域,如果指定ip位址為 inaddr_any() ,套接字端點可以被繫結到所有的系統網路介面,這樣它可以收到這個系統的所有網絡卡的資料報。

#include 

int getsockname(int socket, struct socksddr *restrict address, socklen_t *restrict address_len);

引數:返回值:

引數:返回值:

建立連線:主要針對面向連線的傳輸協議,如(sock_stream和sock_seqpacket)

如果套接字不是面向連線的,connect會設定對方的位址為address,僅能接收該位址的報文,並且不建立連線。

返回值:

功能:用來標記面向連線的套接字,表示套接字可以接受backlog個連線請求;

引數:返回值:

引數:

address:輸出

address_len

返回值:

資料傳輸:

#include 

ssize_t send(int socket, const

char *buffer, size_t length, int flags);

引數:

返回值:

功能:接受資料存在緩衝區。

引數:返回值:

功能:與send一樣除了一下幾點:

sendto的引數裡面有位址和位址長度,因此當套接字是不是面向連線的時候,將直接向位址傳送資料報,這個位址必須由connect設定過。

如果套接字協議支援廣播,而且位址是乙個廣播位址,套接字也設定了o_broadcast則可以向廣播位址廣播。

#include 

ssize_t recvfrom(int socket, const

void *message, size_t length, int flags, const

struct sockaddr *dest_addr, socklen_t dest_len);

send對應,flagsrecv一樣。

#include 

ssize_t sendmsg(int socket, const

struct msghdr *message, int flags);

ssize_t recvmsg(int socket, const

struct msghdr *message, int flags);

引數:獲取主機名字:

#include 

int gethostname(char *name, size_t namelen);

int sethostname(const

char *name, size_t len);

unix 環境高階程式設計 讀書筆記

unix環境高階程式設計 讀書筆記 第8章exit和 exit區別 exit會直接進入核心,不會關閉io流。程序基本控制函式還有 wait,fork,exec。atexit 程式正常退出時呼叫,如果因為signal退出則不能呼叫。功能 註冊函式可以完成一些清理工作,比如全域性log類,可以不設定析構...

unix環境高階程式設計 讀書筆記

檔案 unix支援在不同程序之間共享開啟的檔案。核心使用三種資料結構表示開啟的檔案 原子操作 一般而言,原子操作指的是由多步組成的操作。如果該操作原子的執行,要麼執行完所有步,要麼一步也不執行,不可能只執行所有步驟的乙個子集。2 注意 原子操作函式 pread,pwrite pread 相當於呼叫r...

讀書筆記之UNIX環境高階程式設計 11

執行緒 1.像每個程序有乙個程序id一樣,每個執行緒也有乙個執行緒id。程序id在整個系統中是唯一的,程序id相同,但執行緒id不同,執行緒id只在它所屬的程序環境有效 2.每個程序只有乙個控制線程即main執行緒 3.執行緒建立時並不能保證哪個執行緒會先執行 是新建立的執行緒還是呼叫執行緒 4.主...