[HN Gopher] Beej updated the classic Linux network programming g...
       ___________________________________________________________________
        
       Beej updated the classic Linux network programming guide
        
       Author : matt321
       Score  : 266 points
       Date   : 2022-07-20 13:10 UTC (9 hours ago)
        
 (HTM) web link (beej.us)
 (TXT) w3m dump (beej.us)
        
       | synergy20 wrote:
       | It's released in Nov,2020 but yes it's one of the best.
        
       | biohax2015 wrote:
       | Do we need to know C to use this?
        
         | tempusr wrote:
         | It uses the gcc compiler so C, or C++ can be applicable.
         | 
         | That being said, this book teaches network programming from the
         | ground up so I would recommend understanding how to compile and
         | output C code, then go through the book.
         | 
         | If you run into keywords, or syntax that you are not familiar
         | with, just google it, and then keep working through the
         | examples.
         | 
         | Mind you, the key takeaways from this book are not how to
         | network practice IN C, but general practices. This knowledge
         | can be applied to plenty of other languages such as Rust.
        
         | gre wrote:
         | You can learn C at the same time.
        
           | lprd wrote:
           | Besides the classic C book by K&R, what are some more modern
           | C books that the HN community vouch for?
        
             | shric wrote:
             | I think C Programming: A Modern Approach by K.N. King is
             | great.
        
             | jamal-kumar wrote:
             | Has anyone actually even tried the K&R book in the past
             | couple of decades and not run into issues like the
             | assumption of unbuffered shell output? You get like one or
             | two chapters in and things are already behaving outside of
             | how they did when that book was written in the 1980s. It's
             | a classic, yes, but I don't recommend it to anyone outside
             | of people writing code in C89 for vintage systems... Yet
             | the amount of suggestions I see from people who haven't
             | actually learned C from scratch since the 1990s to read
             | that particular title is high enough that I can't do
             | anything but scratch my head over it. Tons has changed over
             | thirty plus years.
             | 
             | If you're looking for something up to date I'd recommend
             | this:
             | 
             | https://gustedt.gitlabpages.inria.fr/modern-c/
        
               | emmelaich wrote:
               | K&R2 is hard to beat for size and clarity of writing.
               | 
               | Could you elaborate on the "unbuffered shell output"
               | comment?
        
             | gre wrote:
             | My favorite C programming book was Expert C Programming by
             | Peter van der Linden, mainly for the method of reading any
             | C declaration and for teaching me the difference between
             | libc calls vs syscalls. There's also a book called Modern C
             | by Jens Gustedt from 2020 that I have and is more beginner
             | friendly.
             | 
             | The way I learned C is I printed out the Beej's guide
             | client/server code and walked around staring at it until it
             | made sense. (That and compiling/running it and looking up
             | functions in the man pages.)
        
               | macintux wrote:
               | _Expert C Programming_ is brilliantly written. I recently
               | bought another copy because I lost mine; I don't actually
               | need it, but it's a fun read regardless.
        
             | beej71 wrote:
             | I did write a guide to C that's currently in beta. If it's
             | any good or not... Well, I'll leave that up to you. :)
             | 
             | I also really like K&R2 and Van der Linden.
             | 
             | https://beej.us/guide/bgc/
        
               | lprd wrote:
               | I'll most definitely be checking out your guide! Thank
               | you so much for your contributions in the community :)
               | Will the latest revision of your Networking Guide be
               | available on print any time soon? I'd love to buy a copy.
        
         | jey wrote:
         | No, not necessarily. You can use these APIs directly from many
         | different languages. For example, Python has 'socket'[1], Ruby
         | has 'socket'[2], Julia has 'Sockets'[3], PHP has 'socket_*'[4].
         | 
         | 1. https://docs.python.org/3/library/socket.html
         | 
         | 2. https://ruby-
         | doc.org/stdlib-2.5.3/libdoc/socket/rdoc/Socket....
         | 
         | 3. https://docs.julialang.org/en/v1/stdlib/Sockets/
         | 
         | 4. https://www.php.net/manual/en/ref.sockets.php
        
           | freedomben wrote:
           | I went through a ton of linux socket tutorials that were in C
           | using that Ruby Socket library. Highly recommend!
           | 
           | Edit: This is a more up to date link. I don't think the
           | library has changed since 2.5.3, but I usually try to look at
           | latest documentation: https://ruby-
           | doc.org/stdlib-3.1.2/libdoc/socket/rdoc/Socket....
        
         | jsd1982 wrote:
         | Not necessarily but it does help. These tutorials focus mainly
         | on the Berkeley Sockets API which can be exposed as-is (or with
         | slight modification) to many languages beyond just C/C++.
        
         | astrobe_ wrote:
         | It is useful _mainly_ if you have to do some netprog in C, and
         | secondarily if you have to deal with language bindings that do
         | a 1:1 mapping to the BSD socket API.
         | 
         | In other words, you will know when you need it - unless you
         | forget it exists (note: bookmarking it might be a good idea,
         | cause you could remember something like this exists but "what
         | was the name again?").
        
       | srathi wrote:
       | > fork() takes no arguments, and CreateProcess() takes about 48
       | billion arguments.
       | 
       | I chuckled!
        
         | RJIb8RBYxzAMX9u wrote:
         | Jokes aside, it's more apt to compare CreateProcess() with
         | posix_spawn()[0].
         | 
         | [0]
         | https://pubs.opengroup.org/onlinepubs/009695399/functions/po...
        
       | robalni wrote:
       | The weirdest thing just happened. I was on https://beej.us/guide/
       | and I removed the last part of the URL to make it only
       | https://beej.us and I pressed enter. This took me to cnet.com. I
       | have never been on cnet.com before. I have no idea how this
       | happened. Does anyone have a clue? I'm using Firefox if that
       | matters. Did a web server somewhere get hit by a cosmic ray or is
       | beej's server infected by something? This is super weird. When I
       | try to do it again it just takes me to beej's site as expected.
        
         | bruce343434 wrote:
         | bit flip?
        
         | jsd1982 wrote:
         | Hm, unable to reproduce. Perhaps you have some weird browser
         | extension installed or something intercepting DNS requests?
        
         | pronoiac wrote:
         | I couldn't reproduce, but I note the background image changes
         | on reloads. Perhaps beej is hotlinking, and one of the images
         | is based on cnet, who redirected to themselves?
        
         | beej71 wrote:
         | Maybe CNET is offering me large sums of money to randomly
         | redirect every hundredth visitor!
         | 
         | Actually, they're not, so this is weird. I can't repro, and
         | ripgrep tells me "cnet" doesn't appear in my web pages
         | anywhere.
         | 
         | If you find it, I'd love to know what it is.
        
       | lprd wrote:
       | I've yet to break into this one (I've seen it recommended so many
       | times on HN). I'm no network engineer, but networking is a lot of
       | fun for me and I enjoy learning about how it all works. High
       | Performance Browser Networking[0] was one of my favorite books on
       | this topic. Very approachable, even to complete beginner. I
       | suspect that Beej's guide is a bit more low level and I look
       | forward to that!
       | 
       | [0]https://hpbn.co/
        
         | adamch wrote:
         | I think HPBN and Beej's guide are perfect companions to each
         | other. They've been the most useful resources on my journey to
         | learn more about networking.
        
           | metadat wrote:
           | Can you link to "HPBN"? I'm not familiar with what this
           | initialism..
        
             | aaaaaaaaata wrote:
             | See GP comment.
        
       | beej71 wrote:
       | Hey all!
       | 
       | I did update it for IPv6, but that was several years ago.
       | 
       | So I'm not sure which update the OP is referring to.
       | 
       | Appreciate the kind words, though!
        
         | p4bl0 wrote:
         | Hey! Thank you so much for your networking guide! It's my go to
         | reference for socket programming and it is the documentation
         | that I pointed my students to when I was giving a networking
         | course :).
         | 
         | Not directly related but while you're here: you should _really_
         | add Marcus Rediker's _Villains of all nations_ to your Pirates
         | reading list. I highly recommend it! It 's the best pirates'
         | book ever =).
        
         | melony wrote:
         | Any plans to add support for the new async and zero copy APIs?
        
         | 29athrowaway wrote:
         | Mr. @dang, I would like to kindly request that the title is
         | updated.
        
         | shitlord wrote:
         | Thank you for writing this guide. I really enjoyed reading it
         | and it helped me get my first job.
        
         | matt321 wrote:
         | I just pulled it up to refresh my knowledge for a project and
         | it was different. The thing that sticks out the most being
         | different is that the code boxes are highlighted. My first time
         | reading, it was standard grey boxes similar to some other guide
         | (IPC guide I just read was still grey boxes!). Great work! It's
         | the best reference!
        
         | micheljansen wrote:
         | Your guides were legendary when I was just starting out. Thanks
         | for that!
        
         | dceddia wrote:
         | Thank you so much for this guide!
         | 
         | When I was a kid, socket programming felt like a huge thing to
         | me, like _unlocking the next level of programming_.  "Imagine
         | if I could get 2 separate computers to talk to each other!" But
         | it felt impenetrable, and used lots of weird and confusing C
         | tricks.
         | 
         | Your guide demystified the whole subject and put it in plain
         | language that teenage me could understand, and with it, I was
         | able to build my first network-based "hello world". It was a
         | magical feeling to see those messages delivered across the
         | network. Thanks Beej!
        
           | matt321 wrote:
           | >> socket programming felt like a huge thing to me, like
           | unlocking the next level of programming.
           | 
           | This was my story as well, I wonder how many people have been
           | through this just like us!?
        
         | mattgreenrocks wrote:
         | Thanks for your work on this. I read it when I was much younger
         | and it hammered home how to treat stream sockets correctly.
        
         | metadaemon wrote:
         | The IPv6 update really helped me at work, thank you!!
        
         | x-n2o wrote:
         | Wow unreal... I used your guide years ago for my first project
         | when I was learning C. It was an IRC bot.
         | 
         | Thank you!
        
         | kif wrote:
         | Your tutorial demystified network programming for me when I was
         | just a kid. It deserves all the praise it gets. Thank you!
        
         | mistertester wrote:
         | Thanks Beej been using your guides for a long time. Appreciate
         | your hard work!
        
         | danw1979 wrote:
         | Beej: thanks a million ! I learnt all about sockets and
         | select() from your guide back at uni over 20 years ago. I was
         | trying to make an autonomous model helicopter for my 3rd year
         | project, fuel oil powered, with a scarily large rotor
         | diameter... so I made this single threaded emergency stop
         | daemon that listened to a few sockets, including the big red
         | button, which would interrupt the test joystick data and write
         | out some engine-off and neutral collective pitch commands
         | instead.
         | 
         | And yes, it worked in a real emergency ! the heli didn't have
         | any rotors afterwards but we still had our heads.
         | 
         | So I guess you maybe saved my life ?
        
         | jackdaniel wrote:
         | Hey! I've learned network programming with your guide when I
         | was teenager - thank you!
        
         | squarefoot wrote:
         | Thanks for your hard work! When I discovered your guides ages
         | ago I already had digested a good part of the famous text by W.
         | Richard Stevens, but being my copy a very poorly translated
         | edition (I did read English back then, but the imported book
         | would cost a small fortune), I later had to check some things
         | on your guides for consistency, so they turned out very useful
         | anyway.
        
         | booboofixer wrote:
         | I work in networking, probably because of 1. Your guide and 2.
         | My professor. Thanks
        
         | silisili wrote:
         | Thank for for writing and maintaining this for so long. As I
         | wrote yesterday, it is my single favorite piece of programming
         | literature in existence.
        
       | jjice wrote:
       | Beej's Networking guide is probably the funniest software book
       | I've ever read. There are parts in there that actually get me to
       | laugh aloud. All while being a fantastic intro to sockets.
       | 
       | Couldn't recommend this more. Free online, plus you can purchase
       | the paperback now.
        
       | bigdict wrote:
       | What changed? Seems like there was only a minor change 17 days
       | ago: https://github.com/beejjorgensen/bgnet/commits/master.
        
       | billfruit wrote:
       | Does it cover SCTP/websockets?
        
         | JustSomeNobody wrote:
         | They have some stuff on their blog:
         | 
         | https://beej.us/blog/data/websockets/
        
         | matt321 wrote:
         | If you prefer a c implementation: https://libwebsockets.org/ is
         | pretty standard!
        
       | lubesGordi wrote:
       | Beej reminds me that the people who are the best at what they do,
       | are having the most fun.
       | 
       | Thanks for your work Beej! I've referenced your pages many times
       | over the years.
        
       | throwaway5371 wrote:
       | i dont know what was updated, but just want to say big thanks to
       | beej
       | 
       | this guide was what got me into programming years ago
       | 
       | and i still refer to it from time to time
        
       | sp332 wrote:
       | Finally mentions poll() and not only select() !
        
         | Sardtok wrote:
         | IIRC it did that 10 years ago as well, back when I read it for
         | an intro class to C, OS principles and networking.
        
       | alexchro93 wrote:
       | Indeed, this guide is very informative and easy to digest. It's
       | practically required reading for anyone taking CS 6200:
       | Introduction to Operating Systems [1] in Georgia Tech's Online
       | Master of Science Computer Science program.
       | 
       | Thank you, Beej. Looking forward to reading this again today.
       | 
       | 1. https://omscs.gatech.edu/cs-6200-introduction-operating-
       | syst...
        
         | itsmemattchung wrote:
         | Truly an instrumental resource for getting through Operating
         | Systems course at Georgia Tech.
        
       ___________________________________________________________________
       (page generated 2022-07-20 23:00 UTC)