Beej's Guide to Network Programming
Using Internet Sockets
Brian "Beej Jorgensen" Hall
beej@beej.us
Version 2.4.5
August 5, 2007
Copyright © 2007 Brian "Beej Jorgensen" Hall
Contents
- 1. Intro
- 1.1. Audience
- 1.2. Platform and Compiler
- 1.3. Official Homepage
- 1.4. Note for Solaris/SunOS Programmers
- 1.5. Note for Windows Programmers
- 1.6. Email Policy
- 1.7. Mirroring
- 1.8. Note for Translators
- 1.9. Copyright and Distribution
- 2. What is a socket?
- 2.1. Two Types of Internet Sockets
- 2.2. Low level Nonsense and Network Theory
- 3. structs and Data Handling
- 3.1. Convert the Natives!
- 3.2. IP Addresses and How to Deal With Them
- 4. System Calls or Bust
- 4.1. socket()—Get the File Descriptor!
- 4.2. bind()—What port am I on?
- 4.3. connect()—Hey, you!
- 4.4. listen()—Will somebody please call
me?
- 4.5. accept()—"Thank you for calling port
3490."
- 4.6. send() and recv()—Talk to me,
baby!
- 4.7. sendto() and
recvfrom()—Talk to me, DGRAM-style
- 4.8. close() and
shutdown()—Get outta my face!
- 4.9. getpeername()—Who are you?
- 4.10. gethostname()—Who am I?
- 4.11. DNS—You say "whitehouse.gov", I say
"63.161.169.137"
- 5. Client-Server Background
- 5.1. A Simple Stream Server
- 5.2. A Simple Stream Client
- 5.3. Datagram Sockets
- 6. Slightly Advanced Techniques
- 6.1. Blocking
- 6.2. select()—Synchronous I/O Multiplexing
- 6.3. Handling Partial send()s
- 6.4. Serialization—How to Pack Data
- 6.5. Son of Data Encapsulation
- 6.6. Broadcast Packets—Hello, World!
- 7. Common Questions
- 8. Man Pages
- 8.1. accept()
- 8.2. bind()
- 8.3. connect()
- 8.4. close()
- 8.5. gethostname()
- 8.6. gethostbyname(), gethostbyaddr()
- 8.7. getpeername()
- 8.8. errno
- 8.9. fcntl()
- 8.10. htons(), htonl(),
ntohs(), ntohl()
- 8.11. inet_ntoa(), inet_aton()
- 8.12. listen()
- 8.13. perror(), strerror()
- 8.14. poll()
- 8.15. recv(), recvfrom()
- 8.16. select()
- 8.17. setsockopt(), getsockopt()
- 8.18. send(), sendto()
- 8.19. shutdown()
- 8.20. socket()
- 8.21. struct sockaddr_in, struct in_addr
- 9. More References
- 9.1. Books
- 9.2. Web References
- 9.3. RFCs
Index