7 ms·
Beej's Guide to Network Programming
- L0j1k 14y agoThis is how I learned to do it.
- X-Istence 14y agoStill refer to it every so often, especially as backup documentation from the man pages when something isn't entirely clear.
- sp332 14y agoThis 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 14y agowhat 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 14y agoFair 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.
- dashN9ne 14y agoI learned from this in 2006-2007.
- demian 14y agoThis saved me when I had to write a P2P file distribution system for a project in college.
- xtremejames183 14y agoA reference for beginners!
- tumanian 14y agoWow, I am glad that this is still around - the first tutorial that I learned socket and network programming back in 2004.
- thrush 14y agolearning from this now. glad its got all this credibility! (context: college operating systems course)
- krenoten 14y agoIf you want to learn about some more advanced strategies, you may also benefit from this classic: http://www.kegel.com/c10k.html http://www.kegel.com/c10k.html
- curiousDog 14y agoLike others, this is how i learned to do it too. The C programming guide is very good too
- CoryG89 14y agoThis was my first look at networking. Worked for me.
- jcknight 14y agoThis was the go-to guide back in its times. Circa 2006?
- ambrop7 14y agoStill 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 14y agoAre 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.)
- asveikau 14y agoIt 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().
- revoltingx 14y agoFucking classic, i learned to program using these documents: https://github.com/therevoltingx/rootscan https://github.com/therevoltingx/rootscan
- mattpardee 14y agoIf 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 :)
- asveikau 14y agoI 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.
- hlmtre 14y agoHe did indeed. Chico State's CSCI program was actually very good in the early 90s.
- pm90 14y agoI'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 14y agoParty school.
- blaabjerg 14y agoYep, he went to Chico from 1993 to 1997 according to his LinkedIn profile: https://www.linkedin.com/in/brianhall https://www.linkedin.com/in/brianhall
- jlgaddis 14y agoChico 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.
- xxiao 14y agothis is indeed a great resource, but nothing can be considered as hackNEWS
- daave 14y agoWhen 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!
- abhididdigi 14y ago+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.
- kenkam 14y agoSame 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.
- tezka 14y agoit'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 14y agoI'm shocked that you are the only one to mention rstevens, It won't be far fetched if Beej learned from rstevens.
- kqr2 14y agoIs there a similar or updated guide some place which includes non-blocking i/o?
- krenoten 14y agoCheck out "The C10K Problem" (http://www.kegel.com/c10k.html 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-Event-Poll-Interface/ http://www.devshed.com/c/a/BrainDump/Linux-Files-and-the-Eve... epoll socket tutorial: http://kovyrin.net/2006/04/13/epoll-asynchronous-network-programming/ http://kovyrin.net/2006/04/13/epoll-asynchronous-network-pro... Or kqueue if your OS supports it: http://wiki.netbsd.org/tutorials/kqueue_tutorial/ 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 http://en.wikipedia.org/wiki/Interrupt#Level-triggered Overview of the thundering herd problem: http://www.citi.umich.edu/projects/linux-scalability/reports/accept.html http://www.citi.umich.edu/projects/linux-scalability/reports...
- halayli 14y agoTake a look at lthread http://github.com/halayli/lthread http://github.com/halayli/lthread
- n0ndescript 14y agoThere is http://www.wangafu.net/~nickm/libevent-book/ http://www.wangafu.net/~nickm/libevent-book/ which is useful even if you are not using libevent (which most of the cool kids are)
- stefantalpalaru 14y agoSome of those cool kids should take a look at libev: http://software.schmorp.de/pkg/libev.html http://software.schmorp.de/pkg/libev.html
- 14y ago
- infoseckid 14y agoI owe this guy my entry into network programming and eventually security.
- shurcooL 14y agoI owe him the implementation details part of my networking code for my game from 5~ years back.
- markwong 14y agotruely classics. i learned network programming from this guide a decade ago.
- nillort 14y agoAt first, I was confused, thinking that the porn site beeg.com posted a networking tutorial.
- paolord 14y agoIts nice to know other guys learned from this as well. Makes me feel that what I learned back in college was legit.
- enterx 14y agolol 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. ;)
- novamantis 14y agoIs there an even better, more modern networking guide that's free (or not)? Does anyone have a list of networking reference/tutorial/introduction material?
- philhippus 14y agoFor 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.
- wuest 14y agoThis is one of those priceless documents that served me well, and which I have recommended to many others as a great starting place.
- lightblade 14y ago+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.