TCP/IP Sockets in C

Practical Guide for Programmers


  • Michael Donahoo, Baylor University, Waco, TX, USA
  • Kenneth Calvert, University of Kentucky, Lexington, KY, USA

TCP/IP Sockets in C: Practical Guide for Programmers, 2nd Edition is a quick and affordable way to gain the knowledge and skills needed to develop sophisticated and powerful web-based applications. The book's focused, tutorial-based approach enables the reader to master the tasks and techniques essential to virtually all client-server projects using sockets in C. This edition has been expanded to include new advancements such as support for IPv6 as well as detailed defensive programming strategies.

If you program using Java, be sure to check out this book’s companion, TCP/IP Sockets in Java: Practical Guide for Programmers, 2nd Edition.

View full description


Software developers, network programmers, systems programmers, practitioners, researchers who know C and want to learn about writing C networking applications that use TCP/IP, students in courses on computer networking, operating systems, and distributed computing


Book information

  • Published: March 2009
  • ISBN: 978-0-12-374540-8


"Despite my having developed systems software with Sockets and C for 20+ years, I find myself still needing a book like this one. It covers all the subtleties and gotchas that one encounters when writing distributed applications in C with Sockets."--- Bobby Krupczak, The Krupczak Organization

Table of Contents

1 Introduction 1.1 Networks,Packets,andProtocols1.2 AboutAddresses 1.2.1 Writing DownIPAddresses1.2.2 Dealing withTwoVersions 1.2.3 PortNumbers1.2.4 SpecialAddresses1.3 AboutNames1.4 ClientsandServers1.5 WhatIsaSocket? 2 Basic TCP Sockets 2.1 IPv4TCPClient 2.1.1 TCPServer2.2 Creating andDestroying Sockets 2.3 Specifying Addresses 2.3.1 GenericAddresses 2.3.2 IPv4Addresses2.3.3 IPv6Addresses2.3.4 GenericAddressStorage2.3.5 Binary/String AddressConversion 2.3.6 Getting aSocket’sAssociatedAddresses 2.4 Connecting aSocket 2.5 Binding toanAddress 2.6 Handling Incoming Connections2.7 Communication2.8 Using IPv6 3 Of Names and Address Families 3.1 Mapping NamestoNumbers 3.1.1 Accessing theNameService3.1.2 Details,Details 3.2 Writing Address-GenericCode 3.2.1 GenericTCPClient 3.2.2 GenericTCPServer 3.2.3 IPv4-IPv6Interoperation 3.3 Getting NamesfromNumbers4 Using UDP Sockets 4.1 UDPClient 4.2 UDPServer4.3 Sending andReceiving withUDPSockets 4.4 Connecting aUDPSocket5 Sending and Receiving Data 5.1 Encoding Integers 5.1.1 SizesofIntegers 5.1.2 ByteOrdering 5.1.3 SignednessandSignExtension 5.1.4 Encoding Integersby Hand 5.1.5 Wrapping TCPSocketsinStreams5.1.6 Structure Overlays: Alignment and Padding5.1.7 StringsandText 5.1.8 Bit-Diddling:Encoding Booleans5.2 Constructing,Framing andParsing Messages 5.2.1 Framing5.2.2 Text-BasedMessageEncoding 5.2.3 Binary MessageEncoding 5.2.4 Putting ItAllTogether 5.3 Wrapping Up 6 Beyond the Basic Socket Programming 6.1 SocketOptions 6.2 Signals 6.3 Nonblocking I/O 6.3.1 Nonblocking Sockets 6.3.2 AsynchronousI/O 6.3.3 Timeouts 6.4 Multitasking 6.4.1 Per-ClientProcesses 6.4.2 Per-ClientThread 6.4.3 ConstrainedMultitasking 6.5 Multiplexing 6.6 MultipleRecipients6.6.1 Broadcast 6.6.2 Multicast 6.6.3 Broadcastvs. Multicast 7 Under the Hood 7.1 Buffering andTCP7.2 DeadlockDanger 7.3 PerformanceImplications 7.4 TCPSocketLifeCycle7.4.1 Connecting 7.4.2 Closing aTCPConnection 7.5 Demultiplexing Demystified 8 Socket Programming in C++ 8.1 PracticalSocketLibrary Overview8.2 PlusOneService 8.2.1 PlusOneServer8.2.2 PlusOneClient 8.2.3 Running ServerandClient 8.3 Survey Service8.3.1 Survey SupportFunctions 8.3.2 Survey Server8.3.3 Survey Client8.3.4 Running ServerandClient 8.4 Survey Service,Mark28.4.1 SocketAddressSupport 8.4.2 SocketiostreamInterface8.4.3 EnhancedSurvey Server8.4.4 EnhancedSurvey Client 8.4.5 AdministrativeClient 8.4.6 Running ServerandClients