39 网络相关函数(七)——live555源码阅读(四)网络
39 網(wǎng)絡(luò)相關(guān)函數(shù)(七)——live555源碼閱讀(四)網(wǎng)絡(luò)
- 39 網(wǎng)絡(luò)相關(guān)函數(shù)(七)——live555源碼閱讀(四)網(wǎng)絡(luò)
- 簡介
- 14)readSocket從套接口讀取數(shù)據(jù)
- recv/recvfrom 函數(shù)
- 函數(shù)原型:
- 參數(shù)說明:
- 返回說明:
本文由烏合之眾 lym瞎編,歡迎轉(zhuǎn)載 blog.cnblogs.net/oloroso
本文由烏合之眾 lym瞎編,歡迎轉(zhuǎn)載 my.oschina.net/oloroso
簡介
網(wǎng)絡(luò)相關(guān)函數(shù)是一系列用于操作網(wǎng)絡(luò)數(shù)據(jù)的函數(shù)。在多個文件中都有相關(guān)的函數(shù)的定義。還有一些函數(shù)是系統(tǒng)socket API相關(guān)函數(shù),就不提了。
這一系列的函數(shù)大多有一個特點,需要一個UsageEnvironmet&型的參數(shù)。
這些方法大多在live555sourcecontrol\groupsock\include\GroupsockHelper.hh中聲明。
14)readSocket從套接口讀取數(shù)據(jù)
readSocket函數(shù)從套接口socket讀取數(shù)據(jù)到buffer,并捕獲數(shù)據(jù)發(fā)送源的地址到fromAddress。
函數(shù)返回讀取到的字節(jié)數(shù),出錯時返回0并調(diào)用socketErr(env, "recvfrom() error: ")來設(shè)置套接口錯誤消息。
recv/recvfrom 函數(shù)
功能描述:
從套接字上接收一個消息。對于recvfrom,可同時應(yīng)用于面向連接的和無連接的套接字。recv一般只用在面向連接的套接字,幾乎等同于recvfrom,只要將recvfrom的第五個參數(shù)設(shè)置NULL。
如果消息太大,無法完整存放在所提供的緩沖區(qū),根據(jù)不同的套接字,多余的字節(jié)會丟棄。
假如套接字上沒有消息可以讀取,除了套接字已被設(shè)置為非阻塞模式,否則接收調(diào)用會等待消息的到來。
函數(shù)原型:
#include <sys/types.h> #include <sys/socket.h> ssize_t recv(int sock, void *buf, size_t len, int flags); ssize_t recvfrom(int sock, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen);參數(shù)說明:
- sock:索引將要從其接收數(shù)據(jù)的套接字。
- buf:存放消息接收后的緩沖區(qū)。
- len:buf所指緩沖區(qū)的容量。
- flags:是以下一個或者多個標(biāo)志的組合體,可通過or操作連在一起
MSG_DONTWAIT:操作不會被阻塞。
MSG_ERRQUEUE:指示應(yīng)該從套接字的錯誤隊列上接收錯誤值,依據(jù)不同的協(xié)議,錯誤值以某種輔佐性消息的方式傳遞進(jìn)來,使用者應(yīng)該提供足夠大的緩沖區(qū)。導(dǎo)致錯誤的原封包通過msg_iovec作為一般的數(shù)據(jù)來傳遞。導(dǎo)致錯誤的數(shù)據(jù)報原目標(biāo)地址作為msg_name被提供。錯誤以sock_extended_err結(jié)構(gòu)形態(tài)被使用,定義如下
| MSG_PEEK | 指示數(shù)據(jù)接收后,在接收隊列中保留原數(shù)據(jù),不將其刪除,隨后的讀操作還可以接收相同的數(shù)據(jù)。 |
| MSG_TRUNC | 返回封包的實際長度,即使它比所提供的緩沖區(qū)更長, 只對packet套接字有效。 |
| MSG_WAITALL | 要求阻塞操作,直到請求得到完整的滿足。然而,如果捕捉到信號,錯誤或者連接斷開發(fā)生,或者下次被接收的數(shù)據(jù)類型不同,仍會返回少于請求量的數(shù)據(jù)。 |
| MSG_EOR | 指示記錄的結(jié)束,返回的數(shù)據(jù)完成一個記錄。 |
| MSG_TRUNC | 指明數(shù)據(jù)報尾部數(shù)據(jù)已被丟棄,因為它比所提供的緩沖區(qū)需要更多的空間。 |
| MSG_CTRUNC | 指明由于緩沖區(qū)空間不足,一些控制數(shù)據(jù)已被丟棄。 |
| MSG_OOB | 指示接收到out-of-band數(shù)據(jù)(即需要優(yōu)先處理的數(shù)據(jù))。 |
| MSG_ERRQUEUE | 指示除了來自套接字錯誤隊列的錯誤外,沒有接收到其它數(shù)據(jù)。 |
- from:指向存放對端地址的區(qū)域,如果為NULL,不儲存對端地址。
- fromlen:作為入口參數(shù),指向存放表示from最大容量的內(nèi)存單元。作為出口參數(shù),指向存放表示from實際長度的內(nèi)存單元。
返回說明:
成功執(zhí)行時,返回接收到的字節(jié)數(shù)。另一端已關(guān)閉則返回0。失敗返回-1,errno被設(shè)為以下的某個值
- EAGAIN:套接字已標(biāo)記為非阻塞,而接收操作被阻塞或者接收超時
- EBADF:sock不是有效的描述詞
- ECONNREFUSE:遠(yuǎn)程主機阻絕網(wǎng)絡(luò)連接
- EFAULT:內(nèi)存空間訪問出錯
- EINTR:操作被信號中斷
- EINVAL:參數(shù)無效
- ENOMEM:內(nèi)存不足
- ENOTCONN:與面向連接關(guān)聯(lián)的套接字尚未被連接上
- ENOTSOCK:sock索引的不是套接字
轉(zhuǎn)載于:https://www.cnblogs.com/oloroso/p/4736913.html
總結(jié)
以上是生活随笔為你收集整理的39 网络相关函数(七)——live555源码阅读(四)网络的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OC本学习笔记Foundation框架N
- 下一篇: 动态规划--重拾我的“背包”