1. 程式人生 > 其它 >介面測試總結分享(http與rpc)

介面測試總結分享(http與rpc)

  1. recvfrom()
    ssize_t recvfrom(int sockfd,void *buf,size_t len,unsigned int flags, struct sockaddr *from,socklen_t *fromlen);
    sockfd:標識一個已連線套介面的描述字。
    buf:接收資料緩衝區。
    len:緩衝區長度。
    flags:呼叫操作方式。是以下一個或者多個標誌的組合體,可通過“ | ”操作符連在一起: MSG_DONTWAIT:操作不會被阻塞。
    from:(可選)指標,指向裝有源地址的緩衝區。
    fromlen:(可選)指標,指向from緩衝區長度值。

函式說明:recvfrom()用來接收遠端主機經指定的socket傳來的資料,並把資料傳到由引數buf指向的記憶體空間,引數len為可接收資料的最大長度.引數flags一般設0,其他數值定義參考recv().引數from用來指定欲傳送的網路地址,結構sockaddr請參考bind()函式.引數fromlen為sockaddr的結構長度.
返回值:成功則返回接收到的字元數,失敗返回-1.

  1. select():Select在Socket程式設計中還是比較重要的,可是對於初學Socket的人來說都不太愛用Select寫程式,他們只是習慣寫諸如connect、accept、recv或recvfrom這樣的阻塞程式(所謂阻塞方式block,顧名思義,就是程序或是執行緒執行到這些函式時必須等待某個事件的發生,如果事件沒有發生,程序或執行緒就被阻塞,函式不能立即返回)。
    可是使用Select就可以完成非阻塞(所謂非阻塞方式non-block,就是程序或執行緒執行此函式時不必非要等待事件的發生,一旦執行肯定返回,以返回值的不同來反映函式的執行情況,如果事件發生則與阻塞方式相同,若事件沒有發生則返回一個程式碼來告知事件未發生,而程序或執行緒繼續執行,所以效率較高)方式工作的程式,它能夠監視我們需要監視的檔案描述符的變化情況——讀寫或是異常。
    int select(int maxfdp,fd_set *readfds,fd_set *writefds,fd_set *errorfds,struct timeval *timeout);
    maxfdp:指向一組等待可讀性檢查的套接字,
    readfds:指向一組等待可寫性檢查的套接字,
    writefds:用於檢查可寫性,
    errorfds:指向一組等待錯誤檢查的套接字,
    timeout:一個指向timeval結構的指標,用於決定select等待I/o的最長時間。如果為空將一直等待。timeval結構的定義:struct timeval{
    long tv_sec; // seconds
    long tv_usec; // microseconds
    } //如果前三個指標都為NULL,我們就有了一個比sleep()函式更為精確的定時器(sleep()以毫秒為最小單位,這個以微秒為單位)

https://blog.51cto.com/lingdandan/1783611 IO多路複用之select
https://mp.weixin.qq.com/s/TbGvU5LjyFnMYXDzyHqKvg IO多路複用
https://baijiahao.baidu.com/s?id=1611547498841608701&wfr=spider&for=pc 一次讀懂 Select、Poll、Epoll IO複用技術
https://blog.csdn.net/hao134838/article/details/113185058 深入理解Java三種IO模式和Epoll模型