Transcription of UDP通信の基礎 - sbcr.jp
1 1. Chapter 3. 2. 3. UDP 4. UDP .. 5.. DNS query .. Chapter 3 UDP . 6.. 7. 69 1:35:11 PM. Chapter3 UDP 3-2 UDP . UDP TCP . 3-1 UDP UDP . IP VoIP Voice over IP . 1.. TCP UDP UDP TCP . UDP . TCP UDP .. UDP 2. TCP . UDP . UDP NAPT NAT NAT . TCP UDP STUN Simple Traversal / of UDP through NATs . 3. TCP .. TCP NAT P2P .. Chapter 1 IP . 3-1 .. 3-2 UDP 4. TCP . UDP . UDP TCP .. UDP / . UDP . UDP . 5. TCP 3-1 .. TCP . TCP . 6. UDP UDP TCP . UDP . TCP . UDP .. 7. 3-1 IPv6 IPv6 .. 70 71. 70-71 1:35:12 PM. Chapter3 UDP 3-2 UDP . 3-1 UDP List 3-1 recvfrom . UDP UDP #include < >.
2 #include < >. socket() socket() 1.. ssize_t recvfrom(. int s, / /. void buf, / /.. size_t len, / buf /. IP IP int flags, / /. struct sockaddr from, / sockaddr /. socklen_t fromlen / from / 2. );. bind().. List 3-2 recv . #include < >. recv( ) sendto() #include < >. 3. ssize_t recv(. int s, / /. close() close( ). void buf, / /. size_t len, / buf /. int flags / /. );. 4. flags . UDP MSG_CMSG_CLOEXEC. MSG_DONTWAIT. UDP UDP MSG_ERRQUEUE. 5. MSG_OOB. UDP IP UDP MSG_PEER. MSG_TRUNC. MSG_WAITALL.. IP 6. bind . man 2 recvfrom . fromlen IN OUT . recv recvfrom fromlen from from.
3 UDP recvfrom from fromlen . recv recv recvfrom -1 . errno . 7. recvfrom recv UDP recvfrom .. 72 73. 72-73 1:35:14 PM. Chapter3 UDP 3-2 UDP .. List 3-3 UDP . UDP . 1. #include < >. #include < > UDP IP UDP . #include < >.. #include < >. #include < >.. int main(). 2. {. int sock; UDP sendto . struct sockaddr_in addr;. struct sockaddr_in senderinfo; send . socklen_t addrlen; sendto send . char buf[2048];. int n;. List 3-4 sendto 3. sock = socket(AF_INET, SOCK_DGRAM, 0); 1 #include < >. #include < >. = AF_INET;. = htons(12345); ssize_t sendto(. 2. = INADDR_ANY; int s, / /.)}
4 Bind(sock, (struct sockaddr )&addr, sizeof(addr)); const void buf, / /. size_t len, / buf / 4. addrlen = sizeof(senderinfo); 3 int flags, / /. n = recvfrom(sock, buf, sizeof(buf) - 1, 0, const struct sockaddr to, / sockaddr /. (struct sockaddr )&senderinfo, socklen_t tolen / to /. );. write(fileno(stdout), buf, n);. close(sock); 4. List 3-5 send . 5. return 0; #include < >. } #include < >. ssize_t send(. UDP UDP int s, / /. const void buf, / /. Chapter 2 TCP .. size_t len, / buf / 6. int flags / /. IPv4 UDP 1 AF_INET SOCK_DGRAM );. IPv4 UDP UDP . sockaddr_in 2 bind send connect.
5 3 recvfrom sizeof buf write . 1 1 \0 send write flags 7. printf % s flags 0 send write . 4 flags . 74 75. 74-75 1:35:14 PM. Chapter3 UDP 3-2 UDP . MSG_CONFIRM .. IPv4 . MSG_DONTROUTE . MSG_DONTWAIT. List 3-6 UDP . 1. MSG_EOR. MSG_MORE #include < >. MSG_NOSIGNAL #include < >. #include < >. MSG_OOB #include < >. #include < >. flags . int 2. main(int argc, char argv[]). sendto send -1 {. int sock;. errno errno struct sockaddr_in addr;. int n;. 3-2 sendto send errno man 2 sendto . if (argc != 2) { 3. errno fprintf(stderr, "Usage : %s dstipaddr\n", argv[0]);. EACCES return 1.}}
6 }. EAGAIN EWOULDBLOCK . sock = socket(AF_INET, SOCK_DGRAM, 0); 1. EBADF . ECONNRESET = AF_INET; 2. EDESTADDRREQ connection-mode = htons(12345); 4. inet_pton(AF_INET, argv[1], & );. EFAULT . EINTR n = sendto(sock, "HELLO", 5, 0, (struct sockaddr )&addr, sizeof(addr)); 3. if (n < 1) {. EINVAL . perror("sendto");. EISCONN 3-2 return 1;. EMSGSIZE .. } 5. ENOBUFS 3-3 close(sock); 4. ENOMEM . return 0;. ENOTCONN . }. ENOTSOCK s . EOPNOTSUPP flags . EPIPE MSG_NOSIG UDP UDP 6. NAL SIGPIPE . UDP . IPv4 UDP 1 . AF_INET+SOCK_DGRAM . UDP UDP IPv4 UDP . connect sendto 2 .. localhost UDP.
7 3-2 7. IP . 3-3 congestion) . Linux . HELLO 5 3 . 2 . sockaddr_in 4 . 76 77. 76-77 1:35:15 PM. Chapter3 UDP 3-2 UDP . UDP UDP . printf("getaddrinfo : %s\n", gai_strerror(err));. UDP return 1;. UDP }. 1. sock = socket(res->ai_family, res->ai_socktype, 0); 2. if (sock < 0) {. perror("socket");. return 1;. getaddrinfo UDP }. {. const char ipverstr;. 2. inet_pton IPv4/IPv6 switch (res->ai_family) {. case AF_INET: ipverstr = "IPv4";. break;. IPv4/IPv6 getaddrinfo case AF_INET6: ipverstr = "IPv6"; 3. break; 3. UDP default: ipverstr = "unknown";. UDP break;. }. List 3-7 getaddrinfo UDP printf("%s\n", ipverstr).
8 }. #include < >. #include < > n = sendto(sock, "HELLO", 5, 0, res->ai_addr, res->ai_addrlen); 4 4. #include < > if (n < 1) {. #include < > perror("sendto");. #include < > return 1;. #include < > }. #include < >. close(sock); 5. int freeaddrinfo(res);. main(int argc, char argv[]). 5. { return 0;. int sock; }. struct addrinfo hints, res;. int n;. int err; AF_UNSPEC SOCK_DGRAM getaddrinfo 1 . AF_UNSPEC . IPv4/IPv6 AF_UNSPEC AF_INET IPv4 . if (argc != 2) { 6. fprintf(stderr, "Usage : %s dst\n", argv[0]); AF_INET6 IPv6 getaddrinfo . return 1;.. }. 2 getaddrinfo . / IP / getaddrinfo IPv4/IPv6.
9 Memset(&hints, 0, sizeof(hints));. IPv4 IPv6 printf . = AF_UNSPEC; / IPv4/IPv6 / 1. = SOCK_DGRAM; 3 . 7. err = getaddrinfo(argv[1], "12345", &hints, 4 getaddrinfo sendto . if (err != 0) {. getaddrinfo addrinfo . 5 . freeaddrinfo close . 78 79. 78-79 1:35:16 PM. Chapter3 UDP 3-2 UDP . UDP AI_PASSIVE getaddrinfo 1 getaddrinfo . socket bind 2 .. getaddrinfo 3 . recv . 1. List 3-8 getaddrinfo UDP . 4 . #include < >. #include < >. IPv6 . #include < >. #include < >. #include < >. #include < > 2. #include < > List 3-7 getaddrinfo . sendto IPv6 . int main() getaddrinfo IPv6 sendto.)}
10 { IPv4 IPv6 . int sock;. sendto . struct addrinfo hints, res;. 3. int err, n; getaddrinfo Chapter 2 TCP getad char buf[2048];. drinfo getaddrinfo connect . memset(&hints, 0, sizeof(hints)); UDP TCP con = AF_INET; / IPv4 / 1 nect connect sendto . = SOCK_DGRAM;.. = AI_PASSIVE;. err = getaddrinfo(NULL, "12345", &hints, sendto close 4. if (err != 0) { . printf("getaddrinfo : %s\n", gai_strerror(err));. return 1;. } List 3-9 IPv6 . #include < >. sock = socket(res->ai_family, res->ai_socktype, 0); 2 #include < >. if (sock < 0) {. perror("socket");. #include < > 5. #include < >.)}}