<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 134,comments - 22,trackbacks - 0

    int send( SOCKET s,      const char FAR *buf,      int len,      int flags );  

    不論是客戶還是服務(wù)器應(yīng)用程序都用send函數(shù)來(lái)向TCP連接的另一端發(fā)送數(shù)據(jù)。

    客戶程序一般用send函數(shù)向服務(wù)器發(fā)送請(qǐng)求,而服務(wù)器則通常用send函數(shù)來(lái)向客戶程序發(fā)送應(yīng)答。

    該函數(shù)的第一個(gè)參數(shù)指定發(fā)送端套接字描述符;

    第二個(gè)參數(shù)指明一個(gè)存放應(yīng)用程序要發(fā)送數(shù)據(jù)的緩沖區(qū);

    第三個(gè)參數(shù)指明實(shí)際要發(fā)送的數(shù)據(jù)的字節(jié)數(shù);

    第四個(gè)參數(shù)一般置0。

    這里只描述同步Socket的send函數(shù)的執(zhí)行流程。當(dāng)調(diào)用該函數(shù)時(shí),send先比較待發(fā)送數(shù)據(jù)的長(zhǎng)度len和套接字s的發(fā)送緩沖的 長(zhǎng)度,如果len大于s的發(fā)送緩沖區(qū)的長(zhǎng)度,該函數(shù)返回SOCKET_ERROR;如果len小于或者等于s的發(fā)送緩沖區(qū)的長(zhǎng)度,那么send先檢查協(xié)議是否正在發(fā)送s的發(fā)送緩沖中的數(shù)據(jù),如果是就等待協(xié)議把數(shù)據(jù)發(fā)送完,如果協(xié)議還沒(méi)有開(kāi)始發(fā)送s的發(fā)送緩沖中的數(shù)據(jù)或者s的發(fā)送緩沖中沒(méi)有數(shù)據(jù),那么 send就比較s的發(fā)送緩沖區(qū)的剩余空間和len,如果len大于剩余空間大小send就一直等待協(xié)議把s的發(fā)送緩沖中的數(shù)據(jù)發(fā)送完,如果len小于剩余空間大小send就僅僅把buf中的數(shù)據(jù)copy到剩余空間里(注意并不是send把s的發(fā)送緩沖中的數(shù)據(jù)傳到連接的另一端的,而是協(xié)議傳的,send僅僅是把buf中的數(shù)據(jù)copy到s的發(fā)送緩沖區(qū)的剩余空間里)。如果send函數(shù)copy數(shù)據(jù)成功,就返回實(shí)際copy的字節(jié)數(shù),如果send在copy數(shù)據(jù)時(shí)出現(xiàn)錯(cuò)誤,那么send就返回SOCKET_ERROR;如果send在等待協(xié)議傳送數(shù)據(jù)時(shí)網(wǎng)絡(luò)斷開(kāi)的話,那么send函數(shù)也返回SOCKET_ERROR。

    要注意send函數(shù)把buf中的數(shù)據(jù)成功copy到s的發(fā)送緩沖的剩余空間里后它就返回了,但是此時(shí)這些數(shù)據(jù)并不一定馬上被傳到連接的另一端。如果協(xié)議在后續(xù)的傳送過(guò)程中出現(xiàn)網(wǎng)絡(luò)錯(cuò)誤的話,那么下一個(gè)Socket函數(shù)就會(huì)返回SOCKET_ERROR。(每一個(gè)除send外的Socket函數(shù)在執(zhí)行的最開(kāi)始總要先等待套接字的發(fā)送緩沖中的數(shù)據(jù)被協(xié)議傳送完畢才能繼續(xù),如果在等待時(shí)出現(xiàn)網(wǎng)絡(luò)錯(cuò)誤,那么該Socket函數(shù)就返回 SOCKET_ERROR)

    注意:在Unix系統(tǒng)下,如果send在等待協(xié)議傳送數(shù)據(jù)時(shí)網(wǎng)絡(luò)斷開(kāi)的話,調(diào)用send的進(jìn)程會(huì)接收到一個(gè)SIGPIPE信號(hào),進(jìn)程對(duì)該信號(hào)的默認(rèn)處理是進(jìn)程終止。

    通過(guò)測(cè)試發(fā)現(xiàn),異步socket的send函數(shù)在網(wǎng)絡(luò)剛剛斷開(kāi)時(shí)還能發(fā)送返回相應(yīng)的字節(jié)數(shù),同時(shí)使用select檢測(cè)也是可寫(xiě)的,但是過(guò)幾秒鐘之后,再send就會(huì)出錯(cuò)了,返回-1。select也不能檢測(cè)出可寫(xiě)了。

    recv函數(shù)

    int recv( SOCKET s,     char FAR *buf,      int len,     int flags     );   

    不論是客戶還是服務(wù)器應(yīng)用程序都用recv函數(shù)從TCP連接的另一端接收數(shù)據(jù)。

    該函數(shù)的第一個(gè)參數(shù)指定接收端套接字描述符;

    第二個(gè)參數(shù)指明一個(gè)緩沖區(qū),該緩沖區(qū)用來(lái)存放recv函數(shù)接收到的數(shù)據(jù);

    第三個(gè)參數(shù)指明buf的長(zhǎng)度;

    第四個(gè)參數(shù)一般置0。

    這里只描述同步Socket的recv函數(shù)的執(zhí)行流程。當(dāng)應(yīng)用程序調(diào)用recv函數(shù)時(shí),recv先等待s的發(fā)送緩沖中的數(shù)據(jù)被協(xié)議傳送完畢,如果協(xié)議在傳送s的發(fā)送緩沖中的數(shù)據(jù)時(shí)出現(xiàn)網(wǎng)絡(luò)錯(cuò)誤,那么recv函數(shù)返回SOCKET_ERROR,如果s的發(fā)送緩沖中沒(méi)有數(shù)據(jù)或者數(shù)據(jù)被協(xié)議成功發(fā)送完畢后,recv先檢查套接字s的接收緩沖區(qū),如果s接收緩沖區(qū)中沒(méi)有數(shù)據(jù)或者協(xié)議正在接收數(shù)據(jù),那么recv就一直等待,只到協(xié)議把數(shù)據(jù)接收完畢。當(dāng)協(xié)議把數(shù)據(jù)接收完畢,recv函數(shù)就把s的接收緩沖中的數(shù)據(jù)copy到buf中(注意協(xié)議接收到的數(shù)據(jù)可能大于buf的長(zhǎng)度,所以 在這種情況下要調(diào)用幾次recv函數(shù)才能把s的接收緩沖中的數(shù)據(jù)copy完。recv函數(shù)僅僅是copy數(shù)據(jù),真正的接收數(shù)據(jù)是協(xié)議來(lái)完成的),recv函數(shù)返回其實(shí)際copy的字節(jié)數(shù)。如果recv在copy時(shí)出錯(cuò),那么它返回SOCKET_ERROR;如果recv函數(shù)在等待協(xié)議接收數(shù)據(jù)時(shí)網(wǎng)絡(luò)中斷了,那么它返回0。

    注意:在Unix系統(tǒng)下,如果recv函數(shù)在等待協(xié)議接收數(shù)據(jù)時(shí)網(wǎng)絡(luò)斷開(kāi)了,那么調(diào)用recv的進(jìn)程會(huì)接收到一個(gè)SIGPIPE信號(hào),進(jìn)程對(duì)該信號(hào)的默認(rèn)處理是進(jìn)程終止。

    posted on 2010-10-20 16:21 何克勤 閱讀(582) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): GNU Linux/Unix
    主站蜘蛛池模板: 亚洲区不卡顿区在线观看| 亚洲成a人片在线观看日本| 四虎精品免费永久免费视频| 亚洲熟女一区二区三区| 7m凹凸精品分类大全免费| 亚洲第一综合天堂另类专| 亚洲中文字幕无码一久久区| 67194熟妇在线永久免费观看| 美景之屋4在线未删减免费| 亚洲AV无码久久精品蜜桃| 在线成人a毛片免费播放 | h视频在线免费观看| 亚洲专区中文字幕| 久久夜色精品国产亚洲av| 免费精品国产日韩热久久| 日日躁狠狠躁狠狠爱免费视频 | 丁香婷婷亚洲六月综合色| 亚洲精品亚洲人成在线观看| 97无码免费人妻超级碰碰碰碰| 久久精品无码专区免费| 亚洲国产精品无码久久九九大片 | 日韩一级片免费观看| 亚洲人成黄网在线观看| 久久精品国产亚洲精品| 女人被男人桶得好爽免费视频| 久久国产免费一区| 美女被免费视频网站| 亚洲最大福利视频| 亚洲综合一区二区国产精品| 亚洲视频人成在线播放| 在线成人a毛片免费播放 | 18女人毛片水真多免费| jizz免费在线观看| 国产亚洲欧美日韩亚洲中文色| 亚洲欧洲国产综合| 亚洲AV综合色区无码另类小说| 亚洲美女在线国产| 国产成人免费高清激情视频| 1000部羞羞禁止免费观看视频| a毛片免费观看完整| 一级做a毛片免费视频 |