Appendix E: Information Sources
This is a hypertext version of Appendix E in the text Windows
Sockets Network Programming , by Bob Quinn and Dave Shute.
It contains a few URL updates, and a number of new additions not found
in the book.
This appendix contains recommended information sources of all types.
It's split into two sections: Internet sources and Bibliography. The Internet
sources are newsgroups, mail lists, ftp sites, and World Wide Web pages.
The bibliography contains magazine and journal articles, textbooks, frequently
asked question (FAQ) listings, and Internet requests for comments (RFCs).
Internet Sources
This section contains the "dynamic" information sources available
on the Internet:
There are many places where you can get pointers to new sources of information.
The best way to find about them as they appear is by reading relevant newsgroups
and mail lists. FAQs can point you to them after the fact, and many Internet
books have pointers.
URLs and URIs
To access various resources on the Internet, you need a destination
host, the name of a resource, and an indication of what protocol to use
to access the resource. Meet the universal resource locator (URL). URLs
tell you where to go, what to see, and what to do. URLs are a subset of
universal resource identifiers (URIs), and Tim Berners-Lee --the father
of World Wide Web--describes both in a pair of draft RFCs available on
www.cern.ch, the home of the World Wide Web. Here we paraphrase from those
documents:
- URI: encodes the names and addresses of objects on the Internet.
They encapsulate a name in any registered namespace, and label it with
the namespace, to produce a member of the universal set of objects.
- URL: encodes the physical addresses of objects that are retrievable
using application protocols already deployed on the Internet. It is a form
of URI that expresses an address that maps onto a specific access algorithm.
You won't typically use URIs, but you will often use URLs. Here's a
simple high-level description of the URL syntax. The draft RFC details
the complete syntax in Bakus-Naur form, but here is a simpler description
of the URL form in common notation ({} surround required parameters,
[] surround optional parameters, and other characters are mandatory
seperators).
{service}://{host}[:port]/[path/.../][file name]
- service (required field): The service is a standard service
name that indicates the protocol to use; Berners-Lee calls them "URL
schemes." The standard URL syntax currently recognizes file, ftp,
gopher, and http (Note: "file" requires local disk access, rather
than a network access).
- host (required field): The host is the host name or IP address
of the network destination on which to access the service
- port (optional field): The port number is not frequently used,
but may be specified if the service is available on a non-standard port
number.
- path (optional field): This specifies the path name to the destination
directory on the target host. Note: A path without a file after it, always
ends with a forward slash character ("/").
We use URLs throughout the remainder of this appendix to denote resource
locations, where appropriate.
FTP Sites
The File Transfer Protocol (FTP) provides the most fundemental means
of transferring files on the Internet. Here is a list of WinSock-related
or networking-related sites you may find helpful. Almost all network software
vendors maintain FTP sites, although we don't list them here. These sites
are worth exploring since they sometimes have interesting files you would
otherwise not know about.
- ftp://rtfm.mit.edu
- This site has a complete database of USENET FAQs, with a useful text
search tool to find exactly the FAQ you need (see the "FAQs"
section in this appendix for more information).
- ftp://ftp.cs.washington.edu/pub/cstyle.tar.Z
- ftp://ftp.cs.utoronto.ca/doc/programming
- Indian Hill Style Guide, and other useful C-programming documents can
be found here.
- ftp://ftp.isi.edu/in-notes/iana/assignments
(http://www.isi.edu/div7/iana/)
- This site has the latest from the Internet Assigned Numbers Authority
(IANA), like standard port numbers, and multicast addresses. IANA regularly
updates the "Assigned Numbers" RFC.
- ftp://ftp.trumpet.com.au/ftp/pub/winsock
(http://www.trumpet.com.au/)
- This is Peter Tattam's home site for his shareware Trumpet WinSock
implementation and applications.
- ftp://ftp.uu.net
- /networking/bsd-net2: Berkeley Software Distribution (BSD) source code
/usenet/news.answers: FAQs from USENET newsgroups
/published/books : Addison-Wesley has source code from published books
- ftp://gatekeeper.dec.com (http://gatekeeper.dec.com/)
- You can find all dinds of useful stuff here, like RFCs and BSD source
code. This site has a good keyword search utility that helps locate what
you need.
List Servers
Some e-mail locations have list servers that automatically send requested
information. To send a request, you specify your query in the "Subject:"
field in the message header, or in the main body of your message, or in
a combination of both. Different list servers and queris require different
formats. We describe the format with each entry below.
resolve@cs.widener.edu
subject: "help", message body: "site domain name or address";
it mails back the domain name information (i.e. it provides DNS name resolution
via e-mail)
mail-server@nisc.sri.com:
nothing in the subject field; message body: "send rfcnnnn.txt"
to have an RFC text file sent to you
Mail Lists
Here are a few mail lists to which you can subscribe. Be sure to note
how to get off the list in case you get tired of the eemail traffic.
winsock-2: Initially for discussions of WinSock version 2 SDK discussions.
is is fast becoming the site for any WinSock application development questions,
as WinSock 2 becomes the standard API (see the Winsock
2 page for more info). Subscribe by mailing to listserv@mailbag.intel.com
with a BODY of "subscribe winsock-2" (subject is not read). .
winsock-hackers: Not heavily trafficked, but the best place to
expose your WinSock development question to many of the WinSock heavies.
It is well read by most of the WinSock implementors, so this is the place
where many WinSock specification ambiguities are discussed. Subscribe by
mailing to listserv@mailbag.intel.com
with a BODY of "subscribe winsock-hackers" (subject is not read).
winsock-l: Good place for WinSock application users, also for
developers but not many development issues are discussed. Not as heavily
trafficked as the alt.winsock newsgroup, but useful. To join, mail to list-admin@papa.indstate.edu
with nothing in Subject:, and "subscribe winsock-l" as the (only)
textual body of the message. List members have access to WinSock applications
at ftp://papa.indstate.edu/winsock-l,
which is regularly updated.
Newsgroups
USENET newsgroup access is available from any Internet service provider.
There are interest groups for everything under the sun including a lot
of network-programming related traffic. The rules of courtesy dictate that
you should always refer to the "frequently asked questions" for
answers before you post a question (see FAQs section in this appendix for
more information).
alt.winsock: deals with everything
related to Windows Sockets. There are occasional messages dealing with
programming, but it tends to stay crowded with messages about the shareware
WinSock implementations and the latest WinSock applications (problems or
praises).
alt.winsock.programming:
a good place to ask questions, or simply lurk watching for information.
There's a manageable amount of traffic here.
comp.os.ms-windows.networking.tcp-ip:
comp.os.ms-windows.networking.windows:
comp.os.ms-windows.programmer.networks
comp.os.ms-windows.programmer.tools.winsock
These all contain mostly the same WinSock-related messages as in
alt.winsock.
comp.os.ms-windows.programmer.win32:
This deals with generic Win32 programming questions, but there are some
specific to WSOCK32 and others dealing with UNIX-to-Win32 porting issues.
Web Pages
World Wide Web traffic has surpassed FTP traffic on the Internet. The
web is everywhere, and growing daily. There are countless useful sites
for WinSock-related information, although only a few specialize in WinSock
programming. Many of the FTP sites listed in the FTP section of this appendix
also have web pages. There are many search engines for finding information
anywhere on the Internet. Here are some pointers you may find helpful.
- http://www.sockets.com/
- The home site for this book. All source code, errata, and other new
information about this book are available. Lots of additional WinSock information
is also available.
- http://www.stardust.com/
- This is home site for Stardust Technologies WinSock Resource Center,
which maintians a comprehensive repository of WinSock development information
including documentation, articles, software, sample code and more for WinSock
Versions 1.1 and 2.
- http://www.pcausa.com
This is an excellent site for anyone that needs to do network driver-level
work (i.e. to create an application that receives all packets in promiscuous
mode). There is a sample packet capture program and be sure to see the
"infrequently asked
questions" (IFAQ) list.
- http://papa.indstate.edu:8888/CWSApps/index.html
- Here you'll find The Consummate WinSock Applications List, which
lists Forest Stroud's annotated list of popular shareware and public domain
WinSock applications. This includes an online forum for discussions about
the applications.
- http://www.tucows.com
- Not to be outdone by the Stroud's, this site hosts The Ultimate
Collection of Internet Software.
- http://www.cmpcmm.com/cc/standards.html
- This is an excellent jump point when looking for any standards documents
of any kind, but those dealing with network-related standards in particular.
http://www.isi.edu/div7/iana/
- Internet Assigned Numbers Authority website, where all port numbers
and other Internet-related number assignments .
- http://www.mbone.com/
- http://www.best.com/~prince/techinfo
- http://www.mediadesign.co.at/newmedia/more/mbone-faq.html
- Internet multicast backbone (MBONE) references
- http://www.eecs.nwu.edu/unix.html
- This site provides a "reference desk" for UNIX, but it has
lots of useful pointers for anyone doing networking on any platform!
- http://www.NeoSoft.com/internet/paml
- Here is a list of many publicly accessible mailing lists.
Bibliography
This section contains the "static" information sources:
RFCs
Requests for Comments (RFCs) are the official specifications for Internet
standards (which is surprising, considering the name). They started out
informally, but the IETF (Internet Engineering
Task Force) now has a well-established standards review process for
RFCs. The central site for RFCs is http://www.isi.edu/rfc-editor/,
though RFCs are widely available.
- Berners-Lee, Tim. draft-bernerslee-www-uri-00, "Universal Resource
Identifiers in WWW," March 12, 1994, and draft-ietf-uri-uri-03,
"Uniform Resource Locators," March 21, 1994.
- These describe URIs and URLs (see earlier section in this appendix)
used to address World Wide Web pages (for WWW-browsers like NetScape and
Mosaic).
- Braden, R., Borman, D., and Partridge, C. "Computing the Internet
Checksum," Sept. 1988
- This summarizes techniques and algorithms for efficiently computing
the Internet checksum used in IP, TCP, UDP, and ICMP headers.
- Cohen, David. IEN 137, "On Holy Wars and a Plea for Peace,"
1 April 1980
- As the date implies, this is a funny IEN ("Internet Experiment
Notes," which were the precursors to RFCs), but it's also very informative.
It gives the derivation of the terms "big endian" and "little
endian," which are based on Jonathan Swift's Lilliputians and Blefuscians.
They had a holy war about which end of the egg to break, analogous to the
holy war about whether to transmit MSB or LSB first.
- Deering, Steve. RFC 1112, "Host Extensions
for IP Multicasting," Aug. 1989,
- Describes the TCP/IP protocol stack extensions required of a host to
support multicasting and provides mechanics of the Internet Group Management
Protocol (IGMP) used for multicasting.
- Deering, Steve. RFC 1256, "" Sept. 1991
- Describes the ICMP router discovery mechanism (router solicitation
and router advertisements).
- Stine, Robert H. RFC 1175, "FYI on Network Management Tool
Catalog: Tools for Montoring and Debugging TCP/IP Internets and Interconnected
Devices," 1990.
- The title says it all. Although dated 1990, it is still relevant.
- Mockapetris, P.
- RFC 1034, "Domain Names - Concepts and Facilities,"
Nov. 1987, is an introduction to DNS.
- RFC 1035, "Domain Names - Implementation and Specification,"
Nov. 1987, describes the details of the domain name system and protocol.
- Plummer, David C. RFC 826, "An Ethernet
Address Resolution Protocol," Nov. 1982
- Describes ARP over Ethernet. It contains this great quote: "The
world is a jungle in general, and the networking game contributes many
animals."
- Postel, Jonathan B.
- RFC 768, "User Datagram Protocol,"
Aug. 1980, describes UDP.
RFC 791, "Internet Protocol,"
Sept. 1981, describes IP.
- RFC 792, "Internet Control Message
Protocol," Sept. 1981, describes ICMP.
RFC 793, "Transmission Control Protocol,"
Sept '81, describes TCP.
- RFC 821, "Simple Mail Transfer Protocol," Aug. 1982,
describes SMTP.
- RFC 862, "Echo Protocol,"
May 1983, describes TCP and UDP echo service.
- RFC 863, "Discard Protocol,"
May 1983, describes TCP and UDP discard service.
- RFC 864, "Character Generator Protocol,"
May 1983, TCP and UDP chargen.
- Postel, J.B. and Reynolds, J.K.
- RFC 854, "Telnet Protocol Specification," May 1983,
describes basic telnet
- RFC 959, "File Transfer Protocol (FTP),"
Oct. 1985, describes FTP
- Reynolds, J.K. and Postel, J.B. RFC 1700, "Assigned Numbers,"
Oct. 1994
- Describes network byte ordering (big endian) and lists all standard
numbers on the Internet: protocols, well-known ports, multicast addresses,
Sun RPC numbers, and so forth.
- Romao, Artur, RFC 1713, "Tools for DNS Debugging,"
Nov. 1994
- This is an informational RFC that catalogs and describes tools for
detection and correction of anomalies in a DNS configuration (describes
host, dnswalk, lamers, DOC, DDT, and BIND checker code).
FAQs
Frequently Asked Questions (FAQs) answer common questions. Each USENET
newsgroup usually has at least one FAQ. There are a few sites for USENET
FAQs, but two of the best are ftp://ftp.uu.net/usenet/news.answersand
ftp://rtfm.mit.edu. Whenever you start
reading a newsgroup and a question occurs to you, you should check the
FAQ for an answer before asking. They are not called "frequently asked
questions" for nothing.
- Kriz, Harry M. <hmkriz@vt.edu>,
"Windows and TCP/IP for Internet Access"
- http://learning.lib.vt.edu/wintcpip/wintcpip.html
- Young, Warren <tangent@cyberport.com>,
"WinSock Programmer's FAQ"
- http://www.cyberport.com/~tangent/programming/winsock/
Magazine and Journal Articles
The articles collected here are from various magazines, with a number
of them from the Microsoft Developers' Network CD (MSDN CD). This subscription
service available from Microsoft provides you with a new CD-ROM quarterly
that contains articles from Microsoft Systems Journal, some Microsoft
Press texts (like Petzold), Technical Education seminars, white papers,
specifications, and so forth, and any sample source code that accompany
these. It is a gold mine with an easy-to-use, effective, and fast search
utility, and is definitely recommended.
- Chan, Chuck (Margaret K. Johnson, Keith Moore, and David Treadwell),
"Write an
NT WinSock Service,"
- Byte Magazine, Dec. 1994 Describes how to take advantage of
Windows NT features to write a secure server in a design akin to a UNIX
daemon (i.e., the operating system spawns the service process when it receives
a connection request). Although somewhat high level, it has many useful
tips.
- Collyer, Geoff (and Henry Spencer). "News
Need Not Be Slow,"
- This is a short and sweet collection of sensible rules of thumb for
optimizing any application. It uses the optimization of the BSD USENET
news server application as a practical example of what can be accomplished.
It says things like "prepare for the worst, but optimize for the typical
case," and "buying in bulk is often cheaper ...the law of diminishing
returns does apply to buying in bulk." Highly recommended.
- Dolenc, A. (A. Lemmke, D. Keppel, G. V. Reilly). "Notes
on Writing Portable Programs in C,"
- Describes the behavior of different C-preprocessors, compilers and
environments, with some references to ANSI C.
- Dreyer, Lori (John Miller and Al Dunn). "Porting a UNIX/XWindows
Application to Windows using Win32s,"
- USENET comp.os.ms-windows.programmer.win32, September 12, 1994 This
is a telling saga of the pain suffered during a comprehensive code port
that illuminates some fundamental programming differences between the UNIX
and Windows worlds. It deals mostly with non-Sockets issues.
- Spencer, Henry. "How
to Steal Code, or Inventing the Wheel Only Once,"
- If you re-invent the square wheel, you will not benefit when someone
else squares off the corners. A resource shared is a resource squared!
- Spencer, Henry (David Keppel, Mark Brader). "Recommended
C Style and Coding Standards."
- The scope is coding style, not functional organization. Available with
other C-related articles from: ftp://ftp.cs.washington.edu/pub/cstyle.tar.Z,
ftp://cs.toronto.edu/doc/programming
- Treadwell, David, "Developing Transport-Independent Applications
Using the Windows Sockets Interface,"
- Tech Ed 1994 Windows NT, Microsoft Development Library, from Microsoft
Developer Network CD-ROM. Introduces programming with WinSock, with some
emphasis on NT, its multiple transport support, and how to use it.
Textbooks
- Bonner, Pat, Network Programming with Windows Sockets
- Prentice-Hall, Upper SaddleRiver,
NJ, 1996, ISBN: 0-13-230152-0 This title is easily confused with our own
Windows Sockets Network
Programming, and amazingly enough, Pat's coverage of WinSock is very
similar also. This is a worthy replacement, when you can't find WSNP ;-)
- Brown, Ralf (and Jim Kyle). Network Interrupts: A Programmer's Reference
to Network APIs
- Addison-Wesley, Reading, MA, 1994,
ISBN: 0-201-62664-6 This is a conglomerate of quick references for just
about every network API in existence (including WinSock and BSD 4.x Sockets).
The Windows Sockets API has obsoleted many, but it's a convenient, all-in-one
reference for the driver APIs (ODI, NDIS, and Packet Driver).
- Carl-Mitchell, Smoot (and John S. Quarterman), Practical Internetworking
with TCP/IP and UNIX
- Addison-Wesley, Reading, MA, 1993,
ISBN: 0-201-58629-0 This contains practical descriptions of all aspects
of TCP/IP in UNIX systems, with discussion of MAC and PC integration. It's
a great quick reference that answers many questions, or at least gets you
pointed in a direction so you can answer it yourself.
- Cole, Gerald D. Computer Networking for Systems Programmers
- John Wiley and Sons, New York, NY, 1990, ISBN: 0-471-51057-2. A comprehensive
survey of networking layers and protocols, it makes a good "quick
reference" book: very readable but not in-depth.
- Comer, Douglas.
Internetworking with TCP/IP Volume I
- Prentice-Hall, Englewood Cliffs,
NJ, 1991, ISBN: 0-13-468505-9 This beginner's-level introduction (undergraduate
text book) to the structure of the TCP/IP protocol suite makes the transition
to advanced texts like RFCs, Stevens Volume I, or Stallings Volume III
relatively painless.
- Dumas, Arthur. Programming WinSock
- Sams Publishing, Indianapolis, IN, 1995, ISBN: 0-672-30594-1 This provides
a good tutorial for using WinSock with C++; it doesn't cover many of the
intracacies of WinSock, but includes source code that illustrates many
of the basics.
- Estrada, Susan. Connecting to the Internet
- O'Reilly & Associates, Sebastopol,
CA, 1993, ISBN: 1-56592-061-9 An excellent introduction to Internet service
providers, and what you need to know to get connected. This book gives
a quick overview of what's available on the Internet, and lots of information
about the different types of Internet access available. It is best at providing
practical advice about how to choose what's best for you or your business.
- Hunt, Craig. TCP/IP Network Administration
- O'Reilly & Associates, Sebastopol,
CA, 1992, ISBN: 0-937175-82-X This is battle armor for anyone in the trenches.
It is detailed, yet readable, like anything edited by Mike Loukides.
- Jamsa, Kris (and Ken Cope)Internet Programming
- Jamsa Press, Las Vegas, NV, 1995,
ISBN: 1-88413-312-6 From reports I've seen, it sounds like this book covers
lots of the common Internet protocols, and has a number of sample applications
in C.
- Krol, Ed. The Whole Internet: User's Guide & Catalog
- O'Reilly & Associates, Sebastopol,
CA, 1992, ISBN: 1-56592-025-2 There are alot of Internet guide books available
these days, but this is still one of the best. This isn't surprising, since
Ed wrote the original Internet guide in 1989 (RFC 1118, "Hitchhiker's
Guide to the Internet").
- Myers, Brian (and Eric Hamer). Mastering Windows NT Programming
- Sybex, Alameda, CA, 1993, ISBN: 0-7821-1264-1 This is a comprehensive,
detailed, and readable programming guide and reference for Windows NT.
Similar to Petzold's for Windows 3.1.
- Petzold, Charles Programming Windows 3.1, (3rd edition)
- Microsoft Press, Redmond,
WA, 1992, ISBN: 1-55615-395-3 The definitive Windows 3.1 programming guide
and reference, this text contains lots of sample code (includes disk).
- Pietrek, Matt. Windows Internals
- Addison-Wesley, Reading, MA, 1993 ISBN:
0-201-62217-3 This is a companion to Undocumented Windows that exposes
components in the black box that is Windows. It helps you to understand
what you should and shouldn't do in your 16-bit Windows applications (and
why). Also, it can provide guidance when you need some hint as to which
way a bug scurried.
- Raymond, Eric. The New Hacker's Dictionary
- MIT Press, Cambridge, MA,
1991, ISBN: 0-262-68069-6 This is not an average (lame) computer dictionary.
Hackerspeak is obfuscated English, and this text defines the grammar and
vocabulary. It'll help you with USENET messages, RFCs, as well as encounters
with hacknoids. Besides being useful, it's pretty entertaining too. Note:
This text is also available in electronic form on the Internet from the
Gutenberg Project.
- Richter, Jeffrey. Advanced Windows Programming
- Microsoft Press, Redmond,
WA, 1995, ISBN 1-55615-677-4 This is a very useful tutorial and reference
for Win32 programming.
- Roberts, Dave, Developing for the Internet with Winsock
- Coriolis Group, 1996, ISBN 1-883577-42-X
This looks worthwhile (so far, I've only skimmed it in a bookstore), and
I've seen a number of recommendations. Of course, I still think our book
is better if you've got to choose only one :-)
- Roberts, Dave, Internet Protocols Handbook
- Coriolis Group, 1996, ISBN 1-883577-88-8
This is a handy complement to the RFCs. It provides what amounts to digested
forms of the IETF RFC specifications for most of the common standard
Internet protocols.
- Schulman, Andrew. Unauthorized Windows 95: Developers Resource Kit
- IDG Books, San Mateo, CA, 1994,
ISBN: 1-56884-305-4 A glimpse at the internals Windows 95 before its release,
it reveals the "new" operating system's MS-DOS foundation.
- Schulman, Andrew (David Maxey and Matt Pietrek). Undocumented Windows
- Addison-Wesley, Reading, MA, 1992,
ISBN: 0-201-60834-0 This is full of information about the mechanics of
Microsoft Windows 3.x. and includes useful source code for exploring Windows
and debugging application problem.
- Stallings, William, Networking
Standards: a Guide to OSI, ISDN, LAN and MAN
- Addison-Wesley, Reading, MA, 1993,
ISBN: 0-201-56357 If you need to delve into the low-level "network
access" layers (layers 1 and 2 in the OSI network reference model),
then you want a copy of this book. It focuses on OSI, but it deals with
details in many medias: Broadband, ISDN, Ethernet, IEEE 802.5, FDDI, ATM,
and Frame Relay.
- Stevens, W. Richard.
Advanced Programming in the UNIX Environment
- Addison-Wesley, Reading, MA, 1992,
ISBN: 0-201-56317-7 This comprehensive reference for programming with the
runtime library of the (any) UNIX environment contains excellent descriptions
of concepts with code illustrations in C. It describes programming standards:
ANSI, IEEE POSIX, and X/Open, and references specifics in a variety of
UNIX platforms ("vanilla SVR4." 4.3+BSD, BSD/386, and SunOS 4.1.1
and 4.1.2). It is edited by Brian Kernighan
- Stevens, W. Richard.
TCP/IP Illustrated, Volume 1
- Addison-Wesley, Reading, MA, 1994,
ISBN: 0-201-63346-9 It doesn't get any better than this comprehensive,
in-depth, and readable book. If you need to program or debug a TCP/IP network,
you should have a copy of this book.
- Stevens, W. Richard.
UNIX Network Programming
- Prentice-Hall, Englewood Cliffs,
NJ, 1990, ISBN: 0-13-949876-1 This is the definitive reference for Berkeley
Sockets and System V TLI. It describes all the various UNIX interprocess
communication paradigms. It provides many examples of common TCP/IP application
protocols, including ping, TFTP, LPR, and BSD "r" (remote) utilities
such as rsh. We highly recommend this book.
- Tannenbaum, Andrew S. Computer Networks
- Prentice-Hall, Englewood Cliffs,
NJ, 1989, ISBN: 0-13-162959-X This standard network reference has a comprehensive
survey of every layer in the OSI Network Reference Model.
- Umar, Amjad. Distributed Computing: A Practical Synthesis
- Prentice-Hall, Englewood Cliffs,
NJ, 1993, ISBN: 0-13-036252-2 An excellent introduction to network hardware
and software architecture, with descriptions of many open standards, this
text contains a nice mix of high-level management discussions and down-and-dirty
technical applications and integration (with case studies).