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