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!
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.
+1, The same happened with me too. In my university, the professor teaching Computer Networks never understood about computer networks, forget UNIX, he used to come to class mugging some programs up. This guide helped a lot to start with UNIX, I was so overwhelmed that i went on and sent fan mail to beej xD.
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.
It looks like he did put in a blurb about using libevent in order to use a more modern syscall under the hood - it's disappointing though that he didn't explain why epoll and kqueue are better though, people who are new to this would be much better served by that than by any code samples involving select().
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).
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.
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.
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.
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 :)
I also remember seeing this around the year 2000. (One giveaway that it's written in a previous century: It mentions SunOS. Not Solaris, but SunOS. When's the last time you heard somebody talk about that?) At that point I was already familiar with sockets, and mainly found the guide memorable because the name "Beej" had a weird sound to it.
Chico does sound familiar for some reason, with regard to this guide (I also recall reading it many years ago, probably a decade ago or more). I skimmed through it quickly for a version history but didn't see one.
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. ;)
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.
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?