
Beej's Guide to Network Programming - alanthonyc
http://www.beej.us/guide/bgnet/output/html/singlepage/bgnet.html
======
daave
When I was at university I wanted to take a class that had 'introduction to
computer networks' as a prerequisite, but I didn't want to wait 2 semesters
for it to come around again after taking networks first. I spoke to the
professor and he said he'd let me enroll in the course if I promised to
carefully read Beej's guide first, since it contains all the essentials I'd
_really_ need for this follow-on. So, this saved me 6 months, what a golden
nugget!

~~~
kenkam
Same here. My course was a simple one and didn't include network programming,
and at the same time I was learning about select() and co in C. This was a
great primer especially for me as I had some Python knowledge; it really
helped with understanding network programming at a lower level.

Even if you don't code the examples, reading them will give you so much
information.

------
ambrop7
Still not updated to mention anything more than select() as far as non-
blocking IO is concerned, like poll, epoll, or, god no, using an abstract
event loop. Nobody who cares about their code and sanity does blocking I/O
with sockets.

But then, I must confess I too started network programming with this guide :)
It presents the basics nicely, but there's a lot more you should learn about
network programming.

~~~
jcheng
Are you saying "god no" to using an abstract event loop? If so, why? (I've
been using libuv for a project, so far so good.)

~~~
ambrop7
No, of course not, I was just referring the the reluctance of the book to get
modernized. I can't possibly imagine not using an abstract event loop.

~~~
jcheng
Ah, "God forbid"--gotcha.

------
kqr2
Is there a similar or updated guide some place which includes non-blocking
i/o?

~~~
krenoten
Check out "The C10K Problem" (<http://www.kegel.com/c10k.html>) for a high
level discussion of some techniques for high performance servers.

For basic info on Epoll: [http://www.devshed.com/c/a/BrainDump/Linux-Files-
and-the-Eve...](http://www.devshed.com/c/a/BrainDump/Linux-Files-and-the-
Event-Poll-Interface/) epoll socket tutorial:
[http://kovyrin.net/2006/04/13/epoll-asynchronous-network-
pro...](http://kovyrin.net/2006/04/13/epoll-asynchronous-network-programming/)

Or kqueue if your OS supports it:
<http://wiki.netbsd.org/tutorials/kqueue_tutorial/>

Lower level details on level triggered vs edge triggered interrupts:
<http://en.wikipedia.org/wiki/Interrupt#Level-triggered>

Overview of the thundering herd problem:
[http://www.citi.umich.edu/projects/linux-
scalability/reports...](http://www.citi.umich.edu/projects/linux-
scalability/reports/accept.html)

~~~
halayli
Take a look at lthread <http://github.com/halayli/lthread>

------
tezka
it's a shortcut to learn basic network programming with sockets, without
spending too much time on it. Anyone more than casually serious about it
should consider looking at Richard Stevens books, Unix network programming and
TCP/IP illustrated (esp. volume 2).

~~~
segmondy
I'm shocked that you are the only one to mention rstevens, It won't be far
fetched if Beej learned from rstevens.

------
philhippus
For this community, I would have thought this is a bit like seeing a link to
Google.com on the HN front page. Beej's guide is staple internet fodder.

------
sp332
This was an absolute lifesaver when I was thrown into the deep end writing a
high-performance TCP server from scratch. I think it's so effective because
it's "highly opinionated", which is to say, he points out "Foo does this, but
don't use it because that's just silly" or "don't use bar, use baz instead
because it handles qux more easily" and so on.

~~~
tezka
what makes this stuff seem "high-performance" TCP to you? This is standard
socket programming. High performance TCP server is when you actually roll out
your own TCP stack.

~~~
sp332
Fair enough, to be honest the tcp part was not really the bottleneck. But
servicing multiple incoming streams without starving any is really what i
meant.

------
mattpardee
If I'm not mistaken this original document was on Chico State's computer
science domain. It was my understanding Beej went to Chico; does anyone know
for sure? This was around long before 2006, I remember reading it around the
year 2000 when I was first getting into C++. (miracle this quality of a
document escaped anyone's brain in Chico -- I know, I went to CSUC. Let's just
say it was hard to concentrate there :)

~~~
pm90
I'm curious as to why its hard to concentrate, is it a party school or does it
have its own beach like UCSB or what?

~~~
mattpardee
Party school.

------
wuest
This is one of those priceless documents that served me well, and which I have
recommended to many others as a great starting place.

------
X-Istence
Still refer to it every so often, especially as backup documentation from the
man pages when something isn't entirely clear.

------
thrush
learning from this now. glad its got all this credibility! (context: college
operating systems course)

~~~
krenoten
If you want to learn about some more advanced strategies, you may also benefit
from this classic: <http://www.kegel.com/c10k.html>

------
curiousDog
Like others, this is how i learned to do it too. The C programming guide is
very good too

------
infoseckid
I owe this guy my entry into network programming and eventually security.

~~~
shurcooL
I owe him the implementation details part of my networking code for my game
from 5~ years back.

------
enterx
lol soooo retro! brings back memories almost 10 years old. i used it as a
guideline for writing an SMS notifier on incoming e-mails through free HTTP
SMS service. with auth. ;)

------
lightblade
+1 !!

This is the number one thing that got me through network class back in
university. Next to that is the professor's office hour. I don't think I even
touched the textbook.

------
novamantis
Is there an even better, more modern networking guide that's free (or not)?
Does anyone have a list of networking reference/tutorial/introduction
material?

------
tumanian
Wow, I am glad that this is still around - the first tutorial that I learned
socket and network programming back in 2004.

------
paolord
Its nice to know other guys learned from this as well. Makes me feel that what
I learned back in college was legit.

------
demian
This saved me when I had to write a P2P file distribution system for a project
in college.

------
jcknight
This was the go-to guide back in its times. Circa 2006?

------
CoryG89
This was my first look at networking. Worked for me.

------
dashN9ne
I learned from this in 2006-2007.

------
markwong
truely classics. i learned network programming from this guide a decade ago.

------
xtremejames183
A reference for beginners!

------
nillort
At first, I was confused, thinking that the porn site beeg.com posted a
networking tutorial.

------
L0j1k
This is how I learned to do it.

