1CHAPTER 8 ELEMENTARY UDP SOCKETSUser Datagram Protocol is a connectionless, “unreliable” datagram protocol. Function calls for a typical UDP Client/server- Client does not establish a connection with the server.- Server does not accept a connection from a client.- recvfrom function returns the protocol address of the client so server can send a response to correct client.23recvfrom and sendto functionssockfd - Descriptor.*buff - Pointer to buffer to read or write.nbytes - Number of Bytes to read or write.flags - Set to 0 for nowtosendtosocket address structure containing the protocoladdress (IP address and port # ) of where data isto be sent.addrlen Size of socket address structure (an integer value).recvfromfrom*addrlen← ( pointer to integer value )socket address structure that is filled in byrecvfrom with the protocol address (IP addressand port # ) of where data came from.4[ from p. 240 ]5UDP echo ServerRedo echo client - server from chapter 5 but using UDPUDPClientUDPServerfgetsfputssendto recvfromrecvfrom sendto6Server Main FunctionLines 7-12: Note now we use SOCK_DGRAM to mean UDPINADDR_ANY = 0SERV_PORT = 9877Line 13dg_echo does the server processingServer dg_echo functionLine 8-12: Loop reads next datagram and sends back.789Server dg_echo function cont.Note:- This dg-echo function never terminates.- This is an iterative server which is typical for UDP. A concurrent server calls fork function, TCP is typically concurrent.- Each UDP socket has a receive buffer. ( Aside: size is controlled by a socket option SO_RCVBUF ).Difference between UDP and TCP implementations of our example101112UDP echo Client Main FunctionLines 9-12: IPV4 socket address structure is filled in with the IP address, and port number of server.Lines 13:UDP socket is created Lines14:Call dg_clidg_cli functionLines 7: Read a line from standard input using fgets. Lines 8: Send the line to server using sendto. Lines 9: Read back server’s ECHO using recvfrom. Lines 10: Print the echoed line to standard output using fputs.Note: Our client does not call bind, it is NOT NECESSARY131415LACK OF FLOW CONTROL WITH UDPModify client dg _ cli function to send a fixed number of datagramsNow writes 2,000 times a 1,400 BYTE UDP datagram to server.Modify server dg_echo function to receive datagrams and count the number received( No longer echo datagrams back to client )Line 9: Adds ability to execute the function recvfrom_int when type cntrl C. This function prints out how many we got.16171819203882 – 1970 = 1912 dropped due to full socket buffer82 datagrams received => 1994 datagrams6 datagrams were never receivedRepeat this test several times and receive: 37, 108, 30, 108, 114 We can change the socket’s receive buffer using SO_RCVBUF socketoptionDefault size in UDP for a BSD/OS is 41,600 bytes => room for only 41,600 = 29 of our datagrams 1400Can change to 240 K bytes sizeNow we receive 115, 168, 179, 145, and 133 in Stevens example runs.Not much bigger than 37, 108, 30, 108, 114 from before buffer size
View Full Document