C說話中期待socket銜接和對socket定位的辦法。本站提示廣大學習愛好者:(C說話中期待socket銜接和對socket定位的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是C說話中期待socket銜接和對socket定位的辦法正文
C說話listen()函數:期待銜接
頭文件:
#include <sys/socket.h>
界說函數:
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.
毛病代碼:
EBADF 參數sockfd 非正當socket 處置代碼
EACCESS 權限缺乏
EOPNOTSUPP 指定的socket 並未增援listen 形式.
C說話bind()函數:對socket定位
頭文件:
#include <sys/types.h> #include <sys/socket.h>
界說函數:int bind(int sockfd, struct sockaddr * my_addr, int addrlen);
函數解釋:bind()用來設置給參數sockfd 的socket 一個稱號. 此稱號由參數my_addr 指向一sockaddr 構造,關於分歧的socket domain 界說了一個通用的數據構造
struct sockaddr { unsigned short int sa_family; char sa_data[14]; };
1、sa_family 為挪用socket()時的domain 參數, 即AF_xxxx 值.
2、sa_data 最多應用14 個字符長度.
此sockaddr 構造會因應用分歧的socket domain 而有分歧構造界說, 例如應用AF_INET domain,其socketaddr 構造界說便為
struct socketaddr_in { unsigned short int sin_family; uint16_t sin_port; struct in_addr sin_addr; unsigned char sin_zero[8]; }; struct in_addr { uint32_t s_addr; };
1、sin_family 即為sa_family
2、sin_port 為應用的port 編號
3、sin_addr. s_addr 為IP 地址 sin_zero 未應用.
參數 addrlen 為sockaddr 的構造長度.
前往值:勝利則前往0, 掉敗前往-1, 毛病緣由存於errno 中.
毛病代碼:
1、EBADF 參數sockfd 非正當socket 處置代碼.
2、EACCESS 權限缺乏
3、ENOTSOCK 參數sockfd 為一文件描寫詞, 非socket.