C語(yǔ)言中等待socket連接和對(duì)socket定位的方法
C語(yǔ)言listen()函數(shù):等待連接
頭文件:
#include <sys/socket.h>
定義函數(shù):
int listen(int s, int backlog);
函數(shù)說(shuō)明:listen()用來(lái)等待參數(shù)s 的socket 連線. 參數(shù)backlog 指定同時(shí)能處理的最大連接要求, 如果連接數(shù)目達(dá)此上限則client 端將收到ECONNREFUSED 的錯(cuò)誤. Listen()并未開(kāi)始接收連線, 只是設(shè)置socket 為listen 模式, 真正接收client 端連線的是accept(). 通常listen()會(huì)在socket(), bind()之后調(diào)用, 接著才調(diào)用accept().
返回值:成功則返回0, 失敗返回-1, 錯(cuò)誤原因存于errno
附加說(shuō)明:listen()只適用SOCK_STREAM 或SOCK_SEQPACKET 的socket 類型. 如果socket 為AF_INET 則參數(shù)backlog 最大值可設(shè)至128.
錯(cuò)誤代碼:
EBADF 參數(shù)sockfd 非合法socket 處理代碼
EACCESS 權(quán)限不足
EOPNOTSUPP 指定的socket 并未支援listen 模式.
C語(yǔ)言bind()函數(shù):對(duì)socket定位
頭文件:
#include <sys/types.h> #include <sys/socket.h>
定義函數(shù):int bind(int sockfd, struct sockaddr * my_addr, int addrlen);
函數(shù)說(shuō)明:bind()用來(lái)設(shè)置給參數(shù)sockfd 的socket 一個(gè)名稱. 此名稱由參數(shù)my_addr 指向一sockaddr 結(jié)構(gòu),對(duì)于不同的socket domain 定義了一個(gè)通用的數(shù)據(jù)結(jié)構(gòu)
struct sockaddr { unsigned short int sa_family; char sa_data[14]; };
1、sa_family 為調(diào)用socket()時(shí)的domain 參數(shù), 即AF_xxxx 值.
2、sa_data 最多使用14 個(gè)字符長(zhǎng)度.
此sockaddr 結(jié)構(gòu)會(huì)因使用不同的socket domain 而有不同結(jié)構(gòu)定義, 例如使用AF_INET domain,其socketaddr 結(jié)構(gòu)定義便為
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 編號(hào)
3、sin_addr. s_addr 為IP 地址 sin_zero 未使用.
參數(shù) addrlen 為sockaddr 的結(jié)構(gòu)長(zhǎng)度.
返回值:成功則返回0, 失敗返回-1, 錯(cuò)誤原因存于errno 中.
錯(cuò)誤代碼:
1、EBADF 參數(shù)sockfd 非合法socket 處理代碼.
2、EACCESS 權(quán)限不足
3、ENOTSOCK 參數(shù)sockfd 為一文件描述詞, 非socket.
- 使用C語(yǔ)言編寫基于TCP協(xié)議的Socket通訊程序?qū)嵗窒?/a>
- C語(yǔ)言編寫基于TCP和UDP協(xié)議的Socket通信程序示例
- 解析C語(yǔ)言基于UDP協(xié)議進(jìn)行Socket編程的要點(diǎn)
- 用C語(yǔ)言進(jìn)行最基本的socket編程
- C語(yǔ)言中經(jīng)socket接收數(shù)據(jù)的相關(guān)函數(shù)詳解
- C語(yǔ)言中socket相關(guān)網(wǎng)絡(luò)編程函數(shù)小結(jié)
- C語(yǔ)言設(shè)置和取得socket狀態(tài)的相關(guān)函數(shù)用法
- C語(yǔ)言實(shí)現(xiàn)Linux下的socket文件傳輸實(shí)例
- C語(yǔ)言實(shí)現(xiàn)socket簡(jiǎn)單通信實(shí)例
- c語(yǔ)言socket多線程編程限制客戶端連接數(shù)
- C語(yǔ)言socket編程開(kāi)發(fā)應(yīng)用示例
- Linux中使用C語(yǔ)言實(shí)現(xiàn)基于UDP協(xié)議的Socket通信示例
相關(guān)文章
c++中為什么可以通過(guò)指針或引用實(shí)現(xiàn)多態(tài)詳解
這篇文章主要給大家介紹了關(guān)于c++中為何可以通過(guò)指針或引用實(shí)現(xiàn)多態(tài),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04減少C++代碼編譯時(shí)間的簡(jiǎn)單方法(必看篇)
下面小編就為大家?guī)?lái)一篇減少C++代碼編譯時(shí)間的簡(jiǎn)單方法(必看篇)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01在C++程序中開(kāi)啟和禁用Windows設(shè)備的無(wú)線網(wǎng)卡的方法
這篇文章主要介紹了在C++程序中開(kāi)啟和禁用Windows設(shè)備的無(wú)線網(wǎng)卡的方法,包括一些常見(jiàn)錯(cuò)誤的分析與解決,需要的朋友可以參考下2016-03-03C語(yǔ)言文字藝術(shù)之?dāng)?shù)據(jù)輸入輸出
這篇文章主要介紹了C語(yǔ)言文字藝術(shù)之?dāng)?shù)據(jù)輸入輸出,C語(yǔ)言的語(yǔ)句用來(lái)向計(jì)算機(jī)系統(tǒng)發(fā)出操作指令。一條語(yǔ)句編寫完成經(jīng)過(guò)編譯后產(chǎn)生若干條機(jī)器指2022-07-07C語(yǔ)言中常用的幾個(gè)頭文件及庫(kù)函數(shù)
這篇文章主要介紹了C語(yǔ)言中常用的幾個(gè)頭文件及庫(kù)函數(shù)的相關(guān)資料,需要的朋友可以參考下2017-09-09

C語(yǔ)言圣誕樹(shù)的實(shí)現(xiàn)示例