久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

UDP connect

 mediatv 2013-06-26

分類: LINUX

一,、UDP的connect函數(shù),,并不進行3次握手機制,而僅僅是指定了目的ip和port而已,。對于已經(jīng)connect過的套接口
(1)不能再使用sendto或recvfrom函數(shù),,因為connect已經(jīng)指定ip和port,所以只能用write和read函數(shù),。
(2)UDP中,,connect可以多次使用,也可以斷開connect后重新指定ip和port,。,。設(shè)置地址族為AF_UNSPEC,再調(diào)用 connect,,則可以斷開此接口,。
實際上,,sendto的操作即是循環(huán) 連接套接口,,輸出數(shù)據(jù),關(guān)閉套接口 這3個動作的,。
(3)一個socket只能connect一個目的主機,。僅在進程用udp套接口與確定的唯一對方進行通信時,才調(diào)用connect,。

二,、
UDP中 ,長度為0的數(shù)據(jù)包是可以發(fā)送的,,會生成一個包含IP頭部(ipv4-20字節(jié),,ipv6-40字節(jié)),和8字節(jié)UDP頭部,,以及沒有數(shù)據(jù)的 IP數(shù)據(jù)包,,recvfrom返回0,。
所以,當recvfrom返回0,,并不意味著對方關(guān)閉了連接,。實際上,UDP本來就沒有連接可言,。


TCP服務(wù)器一般是并發(fā)多進程的,,UDP服務(wù)器一般是迭代的 。,。

如果服務(wù)端進程未開啟,,那么客戶端往其發(fā)送udp數(shù)據(jù)包時,會返回ICMP不可到達錯誤,,但是這個錯誤一般不返回到客戶端進程,,因為ICMP不可到達錯誤 是異步錯誤,如果客戶端發(fā)送多個UDP,,其中一個返回錯誤,,內(nèi)核是無法判斷這個錯誤屬于哪個數(shù)據(jù)包的。
只有當客戶端使用connect與服務(wù)端建立unp連接時,,ICMP不可到達錯誤才會返還給客戶端進程,,具體地說是在客戶端recv或者read時讀取到 這個 ICMP錯誤。
#include<unp.h>
int main(int argc, char **argv) {
struct sockaddr_in ser;
int fd;
char str[20];
bzero(&ser, sizeof(struct sockaddr_in));
ser.sin_family=AF_INET;
ser.sin_port=htons(9877);
inet_pton(AF_INET, "127.0.0.1", &ser.sin_addr);
fd=socket(AF_INET, SOCK_DGRAM, 0);
if (connect(fd, (struct sockaddr *)&ser, sizeof(struct sockaddr_in))<0)
perror("connect:");
if (sendto(fd, "ok", 3, 0, (struct sockaddr*)&ser, sizeof(struct sockaddr_in))<0)
perror("sendto:");
if (recvfrom(fd, str, 10, 0, NULL, NULL)<0)
perror("recvfrom:");
}

如果服務(wù)器未開啟的話,,那么會有如下輸出  recvfrom:: Connection refused

而如果沒有connect進行udp連接的話,,那么進程就會一直阻塞在recvfrom。,。,。
閱讀(1538) | 評論(0) | 轉(zhuǎn)發(fā)(1) |

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多