did-you-know? rent-now

Amazon no longer offers textbook rentals. We do!

did-you-know? rent-now

Amazon no longer offers textbook rentals. We do!

We're the #1 textbook rental company. Let us show you why.

9780138487140

Internetworking with TCP/IP Vol. III Client-Server Programming and Applications-Windows Sockets Version

by ;
  • ISBN13:

    9780138487140

  • ISBN10:

    0138487146

  • Edition: 1st
  • Format: Paperback
  • Copyright: 1997-04-30
  • Publisher: Pearson
  • Purchase Benefits
List Price: $191.80

Summary

This volume answers the question "How does one use TCP/IP?"focusing on the client-server paradigm, and examining algorithms for both the client and server components of a distributed program.KEY TOPICS:It presents an implementation that illustrates each design and discusses techniques like application-level gateways and tunneling. The book also reviews several standard application protocols and uses them to illustrate the algorithms and implementation techniques.

Table of Contents

Foreword xxiii(2)
Preface xxv
Chapter 1 Introduction And Overview
1(8)
1.1 Use Of TCP/IP
1(1)
1.2 Designing Applications For A Distributed Environment
2(1)
1.3 Standard And Nonstandard Application Protocols
2(1)
1.4 An Example Of Standard Application Protocol Use
2(1)
1.5 An Example Connection
3(1)
1.6 Using TELNET To Access An Alternative Service
4(1)
1.7 Application Protocols And Software Flexibility
5(1)
1.8 Viewing Services From The Provider's Perspective
6(1)
1.9 The Remainder Of The Text
7(1)
1.10 Summary
7(2)
Chapter 2 The Client Server Model And Software Design
9(12)
2.1 Introduction
9(1)
2.2 Motivation
10(1)
2.3 Terminology And Concepts
10(8)
2.3.1 Clients And Servers
10(1)
2.3.2 Privilege And Complexity
11(1)
2.3.3 Standard Vs. Nonstandard Client Software
11(1)
2.3.4 Parameterization Of Clients
12(1)
2.3.5 Connectionless Vs. Connection-Oriented Servers
13(1)
2.3.6 Stateless Vs. Stateful Servers
14(1)
2.3.7 A Stateful File Server Example
14(2)
2.3.8 Statelessness Is A Protocol Issue
16(1)
2.3.9 Servers As Clients
17(1)
2.4 Summary
18(3)
Chapter 3 Concurrent Processing In Client-Server Software
21(16)
3.1 Introduction
21(1)
3.2 Concurrency In Networks
22(1)
3.3 Concurrency In Servers
23(1)
3.4 Terminology And Concepts
24(3)
3.4.1 The Process Concept
25(1)
3.4.2 Threads
25(1)
3.4.3 Programs vs. Threads
26(1)
3.4.4 Procedure Calls
26(1)
3.5 An Example Of Concurrent Thread Creation
27(4)
3.5.1 A Sequential C Example
27(1)
3.5.2 A Concurrent Version
28(2)
3.5.3 Timeslicing
30(1)
3.6 Diverging Threads
31(1)
3.7 Context Switching And Protocol Software Design
32(1)
3.8 Concurrency And Asynchronous I/O
32(1)
3.9 Concurrency Under UNIX
33(1)
3.10 Executing A Separately Compiled Program
34(1)
3.11 Summary
35(2)
Chapter 4 Program Interface To Protocols
37(10)
4.1 Introduction
37(1)
4.2 Loosely Specified Protocol Software Interface
37(1)
4.2.1 Advantages And Disadvantages
38(1)
4.3 Interface Functionality
38(1)
4.4 Conceptual Interface Specification
39(1)
4.5 Implementation Of An API
39(2)
4.6 Two Basic Approaches To Network Communication
41(1)
4.7 The Basic I/O Functions Available In ANSI C
42(1)
4.8 History Of The UNIX Socket API
43(1)
4.9 Summary
44(3)
Chapter 5 The Socket API
47(14)
5.1 Introduction
47(1)
5.2 The History Of Sockets
47(1)
5.3 Specifying A Protocol Interface
48(1)
5.4 The Socket Abstraction
49(2)
5.4.1 Socket Descriptors
49(1)
5.4.2 System Data Structures For Sockets
50(1)
5.4.3 Using Sockets
51(1)
5.5 Specifying An Endpoint Address
51(1)
5.6 A Generic Address Structure
52(1)
5.7 Functions In The Socket API
53(3)
5.7.1 The WSAStartup Function
53(1)
5.7.2 The WSACleanup Function
54(1)
5.7.3 The Socket Function
54(1)
5.7.4 The Connect Function
54(1)
5.7.5 The Send Function
54(1)
5.7.6 The Recv Function
55(1)
5.7.7 The Closesocket Function
55(1)
5.7.8 The Bind Function
55(1)
5.7.9 The Listen Function
55(1)
5.7.10 The Accept Function
56(1)
5.7.11 Summary Of Socket Calls Used With TCP
56(1)
5.8 Utility Routines For Integer Conversion
56(2)
5.9 Using Socket Calls In A Program
58(1)
5.10 Symbolic Constants For Socket Call Parameters
59(1)
5.11 Summary
59(2)
Chapter 6 Algorithms And Issues In Client Software Design
61(18)
6.1 Introduction
61(1)
6.2 Learning Algorithms Instead Of Details
61(1)
6.3 Client Architecture
62(1)
6.4 Identifying The Location Of A Server
62(2)
6.5 Parsing An Address Argument
64(1)
6.6 Looking Up A Domain Name
65(1)
6.7 Looking Up A Well-Known Port By Name
66(1)
6.8 Port Numbers And Network Byte Order
66(1)
6.9 Looking Up A Protocol By Name
67(1)
6.10 The TCP Client Algorithm
67(1)
6.11 Allocating A Socket
68(1)
6.12 Choosing A Local Protocol Port Number
69(1)
6.13 A Fundamental Problem In Choosing A Local IP Address
69(1)
6.14 Connecting A TCP Socket To A Server
70(1)
6.15 Communicating With The Server Using TCP
70(1)
6.16 Reading A Response From A TCP Connection
71(1)
6.17 Closing A TCP Connection
72(1)
6.17.1 The Need For Partial Close
72(1)
6.17.2 A Partial Close Operation
72(1)
6.18 Programming A UDP Client
73(1)
6.19 Connected And Unconnected UDP Sockets
73(1)
6.20 Using Connect With UDP
74(1)
6.21 Communicating With A Server Using UDP
74(1)
6.22 Closing A Socket That Uses UDP
74(1)
6.23 Partial Close For UDP
75(1)
6.24 A Warning About UDP Unreliability
75(1)
6.25 Summary
75(4)
Chapter 7 Example Client Software
79(20)
7.1 Introduction
79(1)
7.2 The Importance Of Small Examples
79(1)
7.3 Hiding Details
80(1)
7.4 An Example Procedure Library For Client Programs
80(1)
7.5 Implementation Of ConTCP
81(1)
7.6 Implementation Of ConUDP
82(1)
7.7 A Procedure That Forms Connections
82(3)
7.8 Using The Example Library
85(1)
7.9 The DAYTIME Service
85(1)
7.10 Implementation Of A TCP Client For DAYTIME
86(1)
7.11 Reading From A TCP Connection
87(1)
7.12 The TIME Service
88(1)
7.13 Accessing The TIME Service
88(1)
7.14 Accurate Times And Network Delays
89(1)
7.15 A UDP Client For The TIME Service
89(2)
7.16 The ECHO Service
91(1)
7.17 A TCP Client For The ECHO Service
92(2)
7.18 A UDP Client For The ECHO Service
94(2)
7.19 Summary
96(3)
Chapter 8 Algorithms And Issues In Server Software Design
99(20)
8.1 Introduction
99(1)
8.2 The Conceptual Server Algorithm
99(1)
8.3 Concurrent Vs. Iterative Servers
100(1)
8.4 Connection-Oriented Vs. Connectionless Access
100(1)
8.5 Connection-Oriented Servers
101(1)
8.6 Connectionless Servers
101(1)
8.7 Failure, Reliability, And Statelessness
102(1)
8.8 Optimizing Stateless Servers
103(2)
8.9 Four Basic Types Of Servers
105(1)
8.10 Request Processing Time
106(1)
8.11 Iterative Server Algorithms
106(1)
8.12 An Iterative, Connection-Oriented Server Algorithm
107(1)
8.13 Binding To A Well-Known Address Using INADDR_ANY
107(1)
8.14 Placing The Socket In Passive Mode
108(1)
8.15 Accepting Connections And Using Them
108(1)
8.16 An Iterative, Connectionless Server Algorithm
108(1)
8.17 Forming A Reply Address In A Connectionless Server
109(1)
8.18 Concurrent Server Algorithms
110(1)
8.19 Master And Slave Threads
110(1)
8.20 A Concurrent, Connectionless Server Algorithm
111(1)
8.21 A Concurrent, Connection-Oriented Server Algorithm
111(1)
8.22 Using Separate Programs As Slaves
112(1)
8.23 Apparent Concurrency Using A Single Thread
113(1)
8.24 When To Use Each Server Type
114(1)
8.25 A Summary of Server Types
115(1)
8.26 The Important Problem Of Server Deadlock
116(1)
8.27 Alternative Implementations
116(1)
8.28 Summary
117(2)
Chapter 9 Iterative, Connectionless Servers (UDP)
119(8)
9.1 Introduction
119(1)
9.2 Creating A Passive Socket
119(3)
9.3 Thread Structure
122(1)
9.4 An Example TIME Server
123(2)
9.5 Summary
125(2)
Chapter 10 Iterative, Connection-Oriented Servers (TCP)
127(8)
10.1 Introduction
127(1)
10.2 Allocating A Passive TCP Socket
127(1)
10.3 A Server For The DAYTIME Service
128(1)
10.4 Thread Structure
128(1)
10.5 An Example DAYTIME Server
129(3)
10.6 Closing Connections
132(1)
10.7 Connection Termination And Server Vulnerability
132(1)
10.8 Summary
133(2)
Chapter 11 Concurrent, Connection-Oriented Servers (TCP)
135(8)
11.1 Introduction
135(1)
11.2 Concurrent ECHO
135(1)
11.3 Iterative Vs. Concurrent Implementations
136(1)
11.4 Thread Structure
136(1)
11.5 An Example Concurrent ECHO Server
137(3)
11.6 Summary
140(3)
Chapter 12 Singly-Threaded, Concurrent Servers (TCP)
143(8)
12.1 Introduction
143(1)
12.2 Data-driven Processing In A Server
143(1)
12.3 Data-Driven Processing With A Single Thread
144(1)
12.4 Thread Structure Of A Singly-Threaded Server
145(1)
12.5 An Example Singly-Threaded ECHO Server
146(2)
12.6 Summary
148(3)
Chapter 13 Multiprotocol Servers (TCP, UDP)
151(8)
13.1 Introduction
151(1)
13.2 The Motivation For Reducing The Number Of Servers
151(1)
13.3 Multiprotocol Server Design
152(1)
13.4 Thread Structure
152(1)
13.5 An Example Multiprotocol DAYTIME Server
153(4)
13.6 The Concept Of Shared Code
157(1)
13.7 Concurrent Multiprotocol Servers
157(1)
13.8 Summary
157(2)
Chapter 14 Multiservice Servers (TCP, UDP)
159(18)
14.1 Introduction
159(1)
14.2 Consolidating Servers
159(1)
14.3 A Connectionless, Multiservice Server Design
160(1)
14.4 A Connection-Oriented, Multiservice Server Design
161(1)
14.5 A Concurrent, Connection-Oriented, Multiservice Server
162(1)
14.6 A Singly-Threaded, Multiservice Server Implementation
162(1)
14.7 Invoking Separate Programs From A Multiservice Server
163(1)
14.8 Multiservice, Multiprotocol Designs
164(1)
14.9 An Example Multiservice Server
165(6)
14.10 Static and Dynamic Server Configuration
171(1)
14.11 An Example Super Server, Inetd
172(2)
14.12 Summary
174(3)
Chapter 15 Uniform, Efficient Management Of Server Concurrency
177(12)
15.1 Introduction
177(1)
15.2 Choosing Between An Iterative And A Concurrent Design
177(1)
15.3 Level Of Concurrency
178(1)
15.4 Demand-Driven Concurrency
179(1)
15.5 The Cost Of Concurrency
179(1)
15.6 Overhead And Delay
179(1)
15.7 Small Delays Can Matter
180(1)
15.8 Thread Preallocation
181(4)
15.8.1 Preallocation Techniques
182(1)
15.8.2 Preallocation In A Connection-Oriented Server
182(1)
15.8.3 Preallocation In A Connectionless Server
183(1)
15.8.4 Preallocation, Bursty Traffic, And NFS
184(1)
15.8.5 Preallocation On A Multiprocessor
185(1)
15.9 Delayed Thread Allocation
185(1)
15.10 The Uniform Basis For Both Techniques
186(1)
15.11 Combining Techniques
187(1)
15.12 Summary
187(2)
Chapter 16 Concurrency In Clients
189(14)
16.1 Introduction
189(1)
16.2 The Advantages Of Concurrency
189(1)
16.3 The Motivation For Exercising Control
190(1)
16.4 Concurrent Contact With Multiple Servers
191(1)
16.5 Implementing Concurrent Clients
191(2)
16.6 Singly-Threaded Implementations
193(1)
16.7 An Example Concurrent Client That Uses ECHO
194(4)
16.8 Execution Of The Concurrent Client
198(1)
16.9 Managing A Timer
199(1)
16.10 Example Output
200(1)
16.11 Concurrency In The Example Code
200(1)
16.12 Summary
201(2)
Chapter 17 Tunneling At The Transport And Application Levels
203(10)
17.1 Introduction
203(1)
17.2 Multiprotocol Environments
203(2)
17.3 Mixing Network Technologies
205(1)
17.4 Dynamic Circuit Allocation
206(1)
17.5 Encapsulation And Tunneling
207(1)
17.6 Tunneling Through An IP Internet
208(1)
17.7 Application-Level Tunneling Between Clients And Servers
208(1)
17.8 Tunneling, Encapsulation, And Dialup Phone Lines
209(1)
17.9 Summary
210(3)
Chapter 18 Application Level Gateways
213(18)
18.1 Introduction
213(1)
18.2 Clients And Servers In Constrained Environments
213(2)
18.2.1 The Reality Of Multiple Technologies
213(1)
18.2.2 Computers With Limited Functionality
214(1)
18.2.3 Connectivity Constraints That Arise From Security
214(1)
18.3 Using Application Gateways
215(1)
18.4 Interoperability Through A Mail Gateway
216(1)
18.5 Implementation Of A Mail Gateway
217(1)
18.6 A Comparison Of Application Gateways And Tunneling
217(2)
18.7 Application Gateways And Limited Functionality Systems
219(1)
18.8 Application Gateways Used For Security
220(1)
18.9 Application Gateways And The Extra Hop Problem
221(2)
18.10 An Example Application Gateway
223(1)
18.11 Details Of A Web-Based Application Gateway
224(1)
18.12 Invoking A CGI Program
225(1)
18.13 URLs For The RFC Application Gateway
226(1)
18.14 A General-Purpose Application Gateway
226(1)
18.15 Operation Of SLIRP
227(1)
18.16 How SLIRP Handles Connections
227(1)
18.17 IP Addressing And SLIRP
228(1)
18.18 Summary
229
Chapter 19 External Data Representation (XDR)
231(12)
19.1 Introduction
231(1)
19.2 Representations For Data In Computers
231(1)
19.3 The N-Squared Conversion Problem
232(1)
19.4 Network Standard Byte Order
233(1)
19.5 A De Facto Standard External Data Representation
234(1)
19.6 XDR Data Types
235(1)
19.7 Implicit Types
236(1)
19.8 Software Support For Using XDR
236(1)
19.9 XDR Library Routines
236(1)
19.10 Building A Message One Piece At A Time
236(2)
19.11 Conversion Routines In The XDR Library
238(2)
19.12 XDR Streams, I/O, and TCP
240(1)
19.13 Records, Record Boundaries, And Datagram I/O
241(1)
19.14 Summary
241(2)
Chapter 20 Remote Procedure Call Concept (RPC)
243(24)
20.1 Introduction
243(1)
20.2 Remote Procedure Call Model
243(1)
20.3 Two Paradigms For Building Distributed Programs
244(1)
20.4 A Conceptual Model For Conventional Procedure Calls
245(1)
20.5 An Extension Of the Procedural Model
245(1)
20.6 Execution Of Conventional Procedure Call And Return
246(1)
20.7 The Procedural Model In Distributed Systems
247(1)
20.8 Analogy Between Client-Server And RPC
248(1)
20.9 Distributed Computation As A Program
249(1)
20.10 Sun Microsystems' Remote Procedure Call Definition
250(1)
20.11 Remote Programs And Procedures
250(1)
20.12 Reducing The Number Of Arguments
251(1)
20.13 Identifying Remote Programs And Procedures
251(1)
20.14 Accommodating Multiple Versions Of A Remote Program
252(1)
20.15 Mutual Exclusion For Procedures In A Remote Program
253(1)
20.16 Communication Semantics
254(1)
20.17 At Least Once Semantics
254(1)
20.18 RPC Retransmission
255(1)
20.19 Mapping A Remote Program To A Protocol Port
255(1)
20.20 Dynamic Port Mapping
256(1)
20.21 RPC Port Mapper Algorithm
257(2)
20.22 RPC Message Format
259(1)
20.23 Marshaling Arguments For A Remote Procedure
260(1)
20.24 Authentication
260(1)
20.25 An Example Of RPC Message Representation
261(1)
20.26 An Example Of An Authentication Field
262(1)
20.27 Summary
263(4)
Chapter 21 Distributed Program Generation (Rpcgen Concept)
267(12)
21.1 Introduction
267(1)
21.2 Using Remote Procedure Calls
268(1)
21.3 Programming Mechanisms To Support RPC
269(1)
21.4 Dividing A Program Into Local And Remote Procedures
270(1)
21.5 Adding Code For RPC
271(1)
21.6 Stub Procedures
271(1)
21.7 Multiple Remote Procedures And Dispatching
272(1)
21.8 Name Of The Client-Side Stub Procedure
273(1)
21.9 Using Rpcgen To Generate Distributed Programs
274(1)
21.10 Rpcgen Output And Interface Procedures
274(1)
21.11 Rpcgen Input And Output
275(1)
21.12 Using Rpcgen To Build A Client And Server
276(1)
21.13 Summary
276(3)
Chapter 22 Distributed Program Generation (Rpcgen Example)
279(34)
22.1 Introduction
279(1)
22.2 An Example To Illustrate Rpcgen
280(1)
22.3 Dictionary Look Up
280(1)
22.4 Eight Steps To A Distributed Application
281(1)
22.5 Step 1: Build A Conventional Application Program
282(4)
22.6 Step 2: Divide The Program Into Two Parts
286(6)
22.7 Step 3: Create An Rpcgen Specification
292(2)
22.8 Step 4: Run Rpcgen
294(1)
22.9 The .h File Produced By Rpcgen
294(2)
22.10 The XDR Conversion File Produced By Rpcgen
296(1)
22.11 The Client Code Produced By Rpcgen
297(1)
22.12 The Server Code Produced By Rpcgen
298(3)
22.13 Step 5: Write Stub Interface Procedures
301(4)
22.13.1 Client-Side Interface Routines
301(3)
22.13.2 Server-Side Interface Routines
304(1)
22.14 Step 6: Compile And Link The Client Program
305(4)
22.15 Step 7: Compile And Link The Server Program
309(2)
22.16 Step 8: Start The Server And Execute The Client
311(1)
22.17 Summary
311(2)
Chapter 23 Network File System Concepts (NFS)
313(30)
23.1 Introduction
313(1)
23.2 Remote File Access Vs. Transfer
313(1)
23.3 Operations On Remote Files
314(1)
23.4 File Access Among Heterogeneous Computers
314(1)
23.5 Stateless Servers
315(1)
23.6 NFS And UNIX File Semantics
315(1)
23.7 Review Of The UNIX File System
315(14)
23.7.1 Basic Definitions
315(1)
23.7.2 A Byte Sequence Without Record Boundaries
316(1)
23.7.3 A File's Owner And Group Identifiers
316(1)
23.7.4 Protection And Access
316(2)
23.7.5 The UNIX Open-Read-Write-Close Paradigm
318(1)
23.7.6 UNIX Data Transfer
319(1)
23.7.7 Permission To Search A Directory
319(1)
23.7.8 UNIX Random Access
320(1)
23.7.9 Seeking Beyond The End Of A UNIX File
320(1)
23.7.10 UNIX File Position And Concurrent Access
321(1)
23.7.11 Semantics Of Write During Concurrent Access
322(1)
23.7.12 UNIX File Names And Paths
322(1)
23.7.13 The UNIX Inode: Information Stored With A File
323(1)
23.7.14 The UNIX Stat Operation
324(1)
23.7.15 The UNIX File Naming Mechanism
325(1)
23.7.16 UNIX File System Mounts
326(2)
23.7.17 UNIX File Name Resolution
328(1)
23.7.18 UNIX Symbolic Links
329(1)
23.8 Files Under NFS
329(1)
23.9 NFS File Types
330(1)
23.10 NFS File Modes
330(1)
23.11 NFS File Attributes
331(1)
23.12 NFS Client And Server
332(1)
23.13 NFS Client Operation
333(1)
23.14 NFS Client And UNIX
334(1)
23.15 NFS Mounts
335(1)
23.16 File Handle
336(1)
23.17 NFS Handles Replace Path Names
336(2)
23.18 An NFS Client Under Windows
338(1)
23.19 File Positioning With A Stateless Server
338(1)
23.20 Operations On Directories
339(1)
23.21 Reading A Directory Statelessly
339(1)
23.22 Multiple Hierarchies In An NFS Server
340(1)
23.23 The Mount Protocol
340(1)
23.24 Summary
341(2)
Chapter 24 Network File System Protocol (NFS, Mount)
343(18)
24.1 Introduction
343(1)
24.2 Using RPC To Define A Protocol
343(1)
24.3 Defining A Protocol With Data Structures And Procedures
344(1)
24.4 NFS Constant, Type, And Data Declarations
345(3)
24.4.1 NFS Constants
345(1)
24.4.2 NFS Typedef Declarations
346(1)
24.4.3 NFS Data Structures
346(2)
24.5 NFS Procedures
348(1)
24.6 Semantics Of NFS Operations
349(4)
24.6.1 NFSPROC_NULL (Procedure 0)
350(1)
24.6.2 NFSPROC_GETATTR (Procedure 1)
350(1)
24.6.3 NFSPROC_SETATTR (Procedure 2)
350(1)
24.6.4 NFSPROC_ROOT (Procedure 3) [Obsolete in NFS3]
350(1)
24.6.5 NFSPROC_LOOKUP (Procedure 4)
350(1)
24.6.6 NFSPROC_READLINK (Procedure 5)
350(1)
24.6.7 NFSPROC_READ (Procedure 6)
350(1)
24.6.8 NFSPROC_WRITECACHE (Procedure 7) [Obsolete in NFS3]
350(1)
24.6.9 NFSPROC_WRITE (Procedure 8)
351(1)
24.6.10 NFSPROC_CREATE (Procedure 9)
351(1)
24.6.11 NFSPROC_REMOVE (Procedure 10)
351(1)
24.6.12 NFSPROC_RENAME (Procedure 11)
351(1)
24.6.13 NFSPROC_LINK (Procedure 12)
351(1)
24.6.14 NFSPROC_SYMLINK (Procedure 13)
351(1)
24.6.15 NFSPROC_MKDIR (Procedure 14)
352(1)
24.6.16 NFSPROC_RMDIR (Procedure 15)
352(1)
24.6.17 NFSPROC_READDIR (Procedure 16)
352(1)
24.6.18 NFSPROC_STATFS (Procedure 17)
352(1)
24.7 The Mount Protocol
353(2)
24.7.1 Mount Constant Definitions
353(1)
24.7.2 Mount Type Definitions
353(1)
24.7.3 Mount Data Structures
354(1)
24.8 Procedures In The Mount Protocol
355(1)
24.9 Semantics of Mount Operations
355(1)
24.9.1 MNTPROC_NULL (Procedure 0)
355(1)
24.9.2 MNTPROC_MNT (Procedure 1)
355(1)
24.9.3 MNTPROC_DUMP (Procedure 2)
356(1)
24.9.4 MNTPROC_UMNT (Procedure 3)
356(1)
24.9.5 MNTPROC_UMNTALL (Procedure 4)
356(1)
24.9.6 MNTPROC_EXPORT (Procedure 5)
356(1)
24.10 NFS And Mount Authentication
356(2)
24.11 Changes In NFS Version 3
358(1)
24.12 Summary
359(2)
Chapter 25 A TELNET Client (Program Structure)
361(38)
25.1 Introduction
361(1)
25.2 Overview
362(2)
25.2.1 The User's Terminal
362(1)
25.2.2 Command And Control Information
362(1)
25.2.3 Terminals, Windows, and Files
362(1)
25.2.4 The Need For Concurrency
363(1)
25.2.5 A Thread Model For A TELNET Client
364(1)
25.3 A TELNET Client Algorithm
364(1)
25.4 Keyboard I/O In Windows
365(1)
25.5 Global Variables Used For Keyboard Control
366(1)
25.6 Initializing The Keyboard Thread
367(3)
25.7 Finite State Machine Specification
370(1)
25.8 Embedding Commands In A TELNET Data Stream
370(1)
25.9 Option Negotiation
371(1)
25.10 Request/Offer Symmetry
372(1)
25.11 TELNET Character Definitions
372(1)
25.12 A Finite State Machine For Data From The Server
373(1)
25.13 Transitions Among States
374(2)
25.14 A Finite State Machine Implementation
376(1)
25.15 A Compact FSM Representation
376(2)
25.16 Keeping The Compact Representation At Run-Time
378(1)
25.17 Implementation Of A Compact Representation
378(2)
25.18 Building An FSM Transition Matrix
380(2)
25.19 The Socket Output Finite State Machine
382(2)
25.20 Definitions For The Socket Output FSM
384(1)
25.21 The Option Subnegotiation Finite State Machine
385(1)
25.22 Definitions For The Option Subnegotiation FSM
386(1)
25.23 FSM Initialization
387(1)
25.24 Arguments For The TELNET Client
387(2)
25.25 The Heart Of The TELNET Client
389(2)
25.26 TELNET Synchronization
391(1)
25.27 Handling A Severe Error
392(1)
25.28 Implementation Of The Main FSM
393(1)
25.29 A Procedure For Immediate Disconnection
394(1)
25.30 Abort Procedure
395(1)
25.31 Summary
395(4)
Chapter 26 A TELNET Client (Implementation Details)
399(30)
26.1 Introduction
399(1)
26.2 The FSM Action Procedures
399(1)
26.3 Recording The Type Of An Option Request
400(1)
26.4 Performing No Operation
401(1)
26.5 Responsing To WILL/WONT For The Echo Option
401(1)
26.6 Sending A Response
402(1)
26.7 Responding To WILL/WONT For Unsupported Options
403(1)
26.8 Responding To WILL/WONT For The No Go-Ahead Option
404(1)
26.9 Generating DO/DONT For Binary Transmission
405(1)
26.10 Responding To DO/DONT For Unsupported Options
406(1)
26.11 Responding To DO/DONT For Transmit Binary Option
406(2)
26.12 Responding To DO/DONT For The Terminal Type Option
408(1)
26.13 Option Subnegotiation
409(1)
26.14 Sending Terminal Type Information
410(2)
26.15 Terminating Subnegotiation
412(1)
26.16 Sending A Character To The Server
412(2)
26.17 Displaying Incoming Data On The User's Terminal
414(3)
26.18 Writing A Block Of Data To The Server
417(1)
26.19 Interacting With The Local Client
418(1)
26.20 Responding To Illegal Commands
419(1)
26.21 Scripting To A File
419(1)
26.22 Implementation Of Scripting
420(1)
26.23 Initialization Of Scripting
420(1)
26.24 Collecting Characters Of The Script File Name
421(1)
26.25 Opening A Script File
422(2)
26.26 Terminating Scripting
424(1)
26.27 Printing Status Information
425(1)
26.28 Summary
426(3)
Chapter 27 Porting Servers From UNIX To Windows
429(12)
27.1 Introduction
429(1)
27.2 Operating In Background
429(2)
27.3 Shared Descriptors And Inheritance
431(1)
27.4 The Controlling TTY
431(1)
27.5 Working Directories
432(1)
27.6 File Creation And Umask
432(1)
27.7 Process Groups
433(1)
27.8 Descriptors For Standard I/O
433(1)
27.9 Mutual Exclusion For A Server
434(1)
27.10 Recording A Process ID
434(1)
27.11 Waiting For A Child Process To Exit
435(1)
27.12 Using A System Log Facility
435(2)
27.12.1 Generating Log Messages
435(2)
27.13 Miscellaneous Incompatibilities
437(1)
27.14 Summary
438(3)
Chapter 28 Deadlock And Starvation In Client-Server Systems
441(10)
28.1 Introduction
441(1)
28.2 Definition Of Deadlock
442(1)
28.3 Difficulty Of Deadlock Detection
442(1)
28.4 Deadlock Avoidance
443(1)
28.5 Deadlock Between A Client And Server
443(1)
28.6 Avoiding Deadlock In A Single Interaction
444(1)
28.7 Starvation Among A Set Of Clients And A Server
444(1)
28.8 Busy Connections And Starvation
445(1)
28.9 Avoiding Blocking Operations
446(1)
28.10 Threads, Connections, And Other Limits
446(1)
28.11 Cycles Of Clients And Servers
447(1)
28.12 Documenting Dependencies
447(1)
28.13 Summary
448(3)
Appendix 1 Functions And Library Routines Used With Sockets 451(34)
Appendix 2 Manipulation Of Windows Socket Descriptors 485(4)
Bibliography 489(10)
Index 499

Supplemental Materials

What is included with this book?

The New copy of this book will include any supplemental materials advertised. Please check the title of the book to determine if it should include any access cards, study guides, lab manuals, CDs, etc.

The Used, Rental and eBook copies of this book are not guaranteed to include any supplemental materials. Typically, only the book itself is included. This is true even if the title states it includes any access cards, study guides, lab manuals, CDs, etc.

Rewards Program