Linux Socket Programming by Example
begins with a very basic introduction to the fundamentals of socket level programming. As the chapters progress, you are introduced to related concepts, such as forming network addresses, Ipv6, the TCP/IP protocol suite and options, writing servers, and creating secure applications. You will also learn about socket fundamentals, domains and addresses, address conversion functions, socket types and protocols, Internet sockets, types and protocols, binding an address to a socket, using Datagram oriented protocols, and much more.
Linux Socket Programming by Example
I. BASIC SOCKET CONCEPTS.
1. Introducing Sockets.
A Brief Historical Introduction. Understanding Sockets. Comparing Sockets to Pipes. Creating Sockets. Performing I/O on Sockets. Closing Sockets. Writing a Client/Server Example.
2. Domains and Address Families.
Nameless Sockets. Understanding Domains. Forming Socket Addresses. Forming Local Addresses. Forming Internet (IPv4) Socket Addresses. Specifying an X.25 Address. Specifying Other Address Families. The AF_UNSPEC Address Family.
3. Address Conversion Functions.
Internet IP Numbers. Allocating IP Addresses. Manipulating IP Numbers.
4. Socket Types and Protocols.
Specifying the Domain of a Socket. Using the socket(2) Function. Choosing a Socket Type. Choosing a Protocol. Socket Domain and Type Summary. Other Linux-Supported Protocols.
5. Binding Addresses to a Socket.
The Purpose of the bind(2) Function. Using the bind(2) Function. Obtaining the Socket Address. Interfaces and Addressing.
6. Connectionless-Oriented Protocols.
The Methods of Communication. Performing Input/Output of Datagrams. Writing a UDP Datagram Server. Writing a UDP Datagram Client. Testing the Datagram Client and Server.
7. Connection-Oriented Protocols for Clients.
Reviewing the Methods of Communication. Internet Services. Consulting the /etc/protocols File. Writing a TCP/IP Client Program. Using connect(2) on SOCK_DGRAM Sockets.
8. Connection-Oriented Protocols for Servers.
Understanding the Role of the Server. The listen(2) Function. The accept(2) Function Call. Writing a TCP/IP Server. Modifying the Client Program.
9. Hostname and Network Name Lookups.
Understanding the Need for Names. Using the uname(2) Function. Obtaining Hostnames and Domain Names. Resolving Remote Addresses.
II. ADVANCED SOCKET PROGRAMMING.
10. Using Standard I/O on Sockets.
Understanding the Need for Standard I/O. Associating a Socket with a Stream. Closing a Socket Stream. Using Separate Read and Write Streams. Winding Up Communications. Handling Interrupts. Defining Buffer Operation. Applying FILE Streams to Sockets.
11. Concurrent Client Servers.
Understanding the Multiple-Client Problem. Overview of Server Functions. Using fork(2) to Service Multiple Clients. Designing Servers That Use select(2). Applying select(2) to a Server.
12. Socket Options.
Getting Socket Options. Setting Socket Options. Retrieving the Socket Type (SO_TYPE). Setting the SO_REUSEADDR Option. Setting the SO_LINGER Option. Setting the SO_KEEPALIVE Option. Setting the SO_BROADCAST Option. Setting the SO_OOBINLINE Option. Options SO_PASSCRED and SO_PEERCRED.
13. Broadcasting with UDP.
Understanding Broadcast Addresses. Broadcasting from a Server. Receiving Broadcasts. Demonstrating the Broadcasts. Broadcasting to a Network.
14. Out-of-Band Data.
Defining Out-of-Band. Understanding the Need for Out-of-Band Data. Sockets and Out-of-Band Data. Variations in Implementation. Using Out-of-Band Data. Understanding the Urgent Pointer. Receiving Out-of-Band Data Inline. Limitations of the Urgent Mode Pointer.
15. Using the inetd Daemon.
Steps Common to Most Servers. Introducing inetd. Implementing a Simple stream tcp Server. Datagram Servers with inetd.
16. Network Security Programming.
Defining Security. The Challenges of Security Identifying Friend or Foe. Securing inetd Servers. Installing Wrapper and Server Programs. Introducing the Client Program. Installing and Testing the Wrapper.
17. Passing Credentials and File Descriptors.
Problem Statement. Introducing Ancillary Data. Introducing I/O Vectors. The sendmsg(2) and recvmsg(2) Functions. Ancillary Data Structures and Macros. Presenting an Ancillary Data Example. Testing the Socket Server.
18. A Practical Network Project.
Problem Statement. Solving the Quote Service Problem. Examining the Quote Server Program. Fetching Quotations via get_tickinfo(). Broadcasting Quotes via broadcast(). Examining the Client Program. Compiling and Running the Demonstration.
Appendix A: Socket Function Quick Reference.
Socket-Specific Functions. Socket Addressing. Reading of Sockets. Writing to Sockets. Other Socket I/O. Controlling Sockets. Network Support Functions. Standard I/O Support. Hostname Support.
Appendix B: Socket-Related Structures Reference.
Socket Address Structures. Miscellaneous Structures. I/O-Related Structures.
Appendix C: Useful Network Tables.