This course may have been last taught by me in 2008 in a deemed university in Andhra Pradesh, India. I may have taught this course to/for three or four batches/years. The class size was typically around 14 to 18 students.
Last updated on 23rd March 2014
This is a Lab course I taught for I. M.Tech. (Comp. Sc.). It teaches network client and server programming using sockets and threads.
On completion of the course, most students have a platform from which they can take off to areas like writing an Internet browser client (like Firefox) or even an HTTP server (like Apache). Of course, we get time only to cover the fundamentals and so the student will have to get deeper into these topics on his/her own. But the platform would have been laid. As a by-product the student would have learned pthread programming which enables him/her to do any multi threaded programming tasks (using pthread or other thread libraries). I have been given to understand that multi-threaded programming is useful for multi-core programming and so I have ensured that adequate coverage is done for this topic.
Prerequisites for the Course
C Programming including debugging skills, User level knowledge of Unix (Unix commands like ls, chmod, mkdir, kill etc.) knowledge of file i/o and signal Unix system calls.
Unix Network Programming Volume 1, 3rd edition: The Sockets Networking API by W. Richard Stevens, Bill Fenner and Andrew M. Rudoff (http://www.informit.com/store/unix-network-programming-volume-1-the-sockets-networking-9780131411555). Here’s the book support site: http://www.unpbook.com/.
Ideal Coverage (subject to time limitations)
- Quick revision of TCP/IP fundamentals. Almost all of the topics of TCP/IP fundamentals are covered in a Computer Networks theory course done at P.G. level. So we just did a quick revision. Topics revised: Internet, protocols, client-server model, TCP, connection oriented service, UDP, connection less service, packet switching, sequencing, error control, flow control, full duplex, half duplex, protocol stack, protocol headers. IP address, IPv4, IPv6, Port numbers, well known ports, hostnames, dns, Byte ordering, Network byte order, Ethernet, MAC address.
- Introduction to sockets:
- Socket APIs: sockaddr structure, socket(), htonx, ntohx functions, bind(), inet_aton(), inet_ntoa(), inet_pton(), connect(), listen(), accept(), read(), write(), close()
- Simple daytime socket client and server program.
- Assignment: Writing a Sayings client and server
- Robust sockets:
- TCP echo client and server. Server uses worker processes for each connection
- Avoiding zombies by handling SIGCHLD signal
- Using select() to wait on multiple file descriptors for I/O. How select enables writing of more responsive client and server programs.
- Shutdown function enabling closure of only Read or Write halves of the connection. How shutdown() enables graceful closure of connection between client and server.
- Assignments: Bringing in all above mentioned features, step-by-step, into Sayings client and server.
- Posix threads (pthreads):
- Basic thread functions: Pthread_create(), pthread_exit(), pthread_join(), pthread_detach()
- Thread synchronization using thread mutexes and condition variables: pthread_mutex_lock(), pthread_mutex_unlock(), pthread_cond_wait(), pthread_cond_signal(); Dangers of multi-threaded program and how to avoid them.
- Assignments: Sayings server implemented as a worker pool using multithreading – two versions, last version uses condition variables for higher efficiency.
- Quick introduction to HTTP protocol
- Optional HTTP Assignment: Program which makes an HTTP browser request and displays/stores response from server.
Index of Links to Chapter Wise Course Pages
Please note that, if I recall correctly, I used slides from usually US university links (obtained usually via Google search and so presumed to be freely accessible to anybody on the net) for all of the topics – why reinvent the wheel? However the topics links below clearly specify the sections covered/to be read as reading assignments and the assignments, most, if not all, of which were created by me specially for this course. So I think they give a good framework for students to learn Network (socket) Programming and pthread programming in a semester in college/university environments. [In some years, due to lack of time the pthread programming followed by the http parts of the course got moved to a separate course done after the Network programming course. Two separate courses allows/gave time for the students to attempt/work on most assignments of the course(s) thereby strengthening the knowledge they gained of the topics covered by the course(s).]
Further, please note that, as a first step, I have focused on putting up the course content used by me to teach this course in the deemed university in Andhra Pradesh, India, suitably modified, on this blog. As part of the minor modifications for putting it up on the publicly accessible blog, some errors may have crept in. I have not checked all the modifications for accuracy (due to other demands on my time). If this course (on this blog) does get utilized by students then the errors in the modified part will come to light and will get fixed by me (or others). I think that is a better way of investing my (and others) time for fixing any errors in this course (on this blog).
Former Student Feedback
A former student who had been taught these courses by me, wrote me on 22nd March 2014:
These courses (Advanced Unix Programming and Unix Network Programming) went a long way in helping me land my job at Alcatel-Lucent. I had a one-on-one interview with my hiring manager that was entirely on Unix. After joining the company I learned that this person(manager) was a big time ‘Unix fan’. It was very satisfying to have done well in that interview. On the job, we completely relied on Solaris Unix based servers and the concepts of processes and threads gained from these course(s), went a long way in helping me grasp the software.
Thank you Ravi Sir.