小白學c 之tcp鏈結中的函式

2021-06-26 11:09:29 字數 1687 閱讀 5935

1、標頭檔案:#include #include

定義函式:int accept(int s, struct sockaddr * addr, int * addrlen);

函式說明:accept()用來接受引數s 的socket 連線. 引數s 的socket 必需先經bind()、listen()函式處理過, 當有連線進來時accept()會返回乙個新的socket 處理**, 往後的資料傳送與讀取就是經由新的socket處理, 而原來引數s 的socket 能繼續使用accept()來接受新的連線要求. 連線成功時, 引數addr 所指的結構會被系統填入遠端主機的位址資料, 引數addrlen 為scokaddr 的結構長度. 關於機構sockaddr 的定義請參考bind().

返回值:成功則返回新的socket 處理**, 失敗返回-1, 錯誤原因存於errno 中.

2、定義函式:int bind(int sockfd, struct sockaddr * my_addr, int addrlen);

函式說明:bind()用來設定給引數sockfd 的socket 乙個名稱. 此名稱由引數my_addr 指向一sockaddr 結構,對於不同的socket domain 定義了乙個通用的資料結構

struct sockaddr

;1、sa_family 為呼叫socket()時的domain 引數, 即af_***x 值.

2、sa_data 最多使用14 個字元長度.

此sockaddr 結構會因使用不同的socket domain 而有不同結構定義, 例如使用af_inet domain,其socketaddr 結構定義便為

struct socketaddr_in

;struct in_addr

;1、sin_family 即為sa_family

2、sin_port 為使用的port 編號

3、sin_addr. s_addr 為ip 位址 sin_zero 未使用.

引數 addrlen 為sockaddr 的結構長度.

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

3、定義函式:int connect(int sockfd, struct sockaddr * serv_addr, int addrlen);

函式說明:connect()用來將引數sockfd 的socket 連至引數serv_addr 指定的網路位址. 結構sockaddr請參考bind(). 引數addrlen 為sockaddr 的結構長度.

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

4、定義函式:int listen(int s, int backlog);

函式說明:listen()用來等待引數s 的socket 連線. 引數backlog 指定同時能處理的最大連線要求, 如果連線數目達此上限則client 端將收到econnrefused 的錯誤. listen()並未開始接收連線, 只是設定socket 為listen 模式, 真正接收client 端連線的是accept(). 通常listen()會在socket(), bind()之後呼叫, 接著才呼叫accept().

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

附加說明:listen()只適用sock_stream 或sock_seqpacket 的socket 型別. 如果socket 為af_inet 則引數backlog 最大值可設至128.

小白學c 之建構函式裡的虛函式

include include include using namespace std class base virtual void logbase class derive public base int main int argc,const char argv 這段 的結果是列印 from ...

小白學Python 之函式 二

定義乙個函式 defgetname name print 請叫我 format name return def getitem k b 0 for i in k b b i print b returnb 呼叫getname 小王 k 1,2,34,5,3,56,45,6,56,767,98 get...

python中的TCP鏈結

tcp伺服器 import socket,time import threading s socket.socket socket.af inet,socket.sock stream s.bind 127.0.0.1 8888 s.listen 5 print waiting for connec...