High Level Socket API Dr. Sanjay P. Ahuja, Ph.D. 2010-14 FIS Distinguished Professor of Computer Science School of Computing, UNF The Client-Server Model An application that initiates communication is a client. A server is any program that waits for incoming communication requests from a client. Standard client programs included with TCP/IP software include telnet client, SSH client, email client, ftp client etc. The client-server model involves requests and replies. Types of Servers: Connectionless vs. Connection-Oriented servers If client and server communicate using User Datagram Protocol (UDP), the interaction is connectionless. If they use Transmission Control Protocol (TCP), the interaction is connection-oriented. TCP provides the reliability needed to communicate across the Internet. It retransmits segments that do not arrive correctly at the destination It uses checksum to ensure data received is not corrupted during transmission It uses sequence numbers to ensure data arrives in order etc. UDP provides “best-effort” service and does not guarantee reliable delivery. It is suited to real-time, audio/video streaming traffic. Types of Servers: Iterative vs. Concurrent servers An iterative server will service one client request before moving onto the next request. In this scenario, queues can build up. A concurrent server will spawn a new (child) process (or thread) to service a client request and itself listen for the next client connection. This generally provides quicker response time. Server software must be explicitly programmed to handle concurrent client requests because multiple clients contact a server using its single, well-known protocol port. The fork() function call is used to create a new process in UNIX/Linux. This call causes the O/S to make a copy of the executing program and allows both copies to run at the same time. The call returns a finite value (process ID# of child process) to the calling (parent) process and a value of 0 to the child process. Types of Servers: Iterative vs. Concurrent servers The Socket API TCP/IP software reside in the O/S. So application programs need to interact with the O/S to use TCP/IP to communicate. The routines provided by the O/S defines the API. The Socket Interface from UC Berkeley is such an interface for the BSD UNIX O/S for application programs to interact with the TCP/IP software residing in the O/S. A socket is one end-point of a two-way communication link between two programs running on the network. TCP/IP protocols define a communication endpoint to consist of an IP address and a protocol port number. Outline for typical concurrent servers int pid,s, conn; S = Socket( .. ); // fill in server address Bind(s, ..); Listen(s, LISTNQ); while(1){ conn = Accept(s, ..); //blocking call if( (pid = fork()) ==0) { close (s); //child closes listening socket doit( conn); //service request close(conn); exit(0); //child exits } // end of if close(conn); //parent closes connected socket }// end of while loop