Hacker News new | ask | show | jobs
by badhairday 5008 days ago
As one of the Amazon reviewers states, "sockets receive a scant five pages." Does anyone know of an education resource like this that does cover some real world socket programming examples in C (or C++)? This would help me immensely in an upcoming project.
6 comments

Stevens's Unix Network Programming is the classic. Any edition will do -- quite frankly the first is clearest. He gets coverage-happy (STREAMS, seriously?) in the 2nd and the 3rd (completed by another author after Stevens's death) is just plain too big.
No, really. Whatever else you refer to, make sure you include Stevens' UNP. (edit: agree also, 1st edition is the best by far)
Beej's networking guide is pretty good

http://beej.us/guide/bgnet/

After reading the Beej's guide to networking programming [1], I wondered what could be the simplest approach to making a multiclient socket server using unix pthreads/mutexes. I ended up writing [2] (C++), mostly as an exercise. Although I have never tested it properly nor I consider myself to be a great programmer, it seems to work. Not something to learn from, though. Anyway, any feedback is really appreciated.

[1] http://beej.us/guide/bgnet/

[2] https://github.com/raaapha/multichat

I found that opening a socket and using select is pretty straightforward. When I write an app, the head-scratching is generally over how to build an event-loop to juggle all the stuff I have going on. Most of the time when I write a tool it will need to do this, but I haven't seen any good books that cover it.

Are there any book recommendations about taking the next step? i.e. Structuring your application so you do regular reads and writes, sleep at sensible times so you aren't sledging the host, useful message-passing patterns. That talk about the tradeoffs, and optimisations, whether you should be doing one select per loop, or trying to do a greedy read on each pass, possibly even running select a few times in order to get that data in.

Stevens volume I seems like it would have been a good place for this, maybe it's out of scope. It focuses on ways you can use the unix API, but avoids straying into application design issues.

The Linux Programming Interface by Kerrisk has pretty thorough coverage of sockets (and everything else).

http://www.amazon.com/The-Linux-Programming-Interface-Handbo...

I prefer to use libevent, it is more tested and proven than i could make.