The byproducts of reading OpenBSD netcat code
source link: https://www.tuicool.com/articles/hit/RRFVja
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
When I took part in a training last year, I heard about netcat
for the first time. During that class, the tutor showed some hacks and tricks of using netcat
which appealed to me and motivated me to learn the guts of it. Fortunately, in the past 2
months, I was not so busy that I can spend my spare time to dive into OpenBSD
‘s netcat
source code, and got abundant byproducts during this process.
(1) Brush up socket programming. I wrote my first network application more than 10
years ago, and always think the socket APIs
are marvelous. Just ~10
functions ( socket
, bind
, listen
, accept
…) with some IO multiplexing buddies ( select
, poll
, epoll
…) connect the whole world, wonderful! From that time, I developed a habit that is when touching a new programming language, network programming is an essential exercise. Even though I don’t write socket related code now, reading netcat
socket code indeed refresh my knowledge and teach me new stuff.
(2) Write a tutorial
about netcat
. I am mediocre programmer and will forget things when I don’t use it for a long time. So I just take notes of what I think is useful. IMHO, this “tutorial” doesn’t really mean teach others something, but just a journal which I can refer when I need in the future.
(3) Submit patches to netcat
. During reading code, I also found bugs and some enhancements. Though trivial contributions to OpenBSD
, I am still happy and enjoy it.
(4) Implement a C++
encapsulation
of libtls
. OpenBSD
‘s netcat
supports tls/ssl
connection, but it needs you take full care of resource management ( memory
, socket
, etc), otherwise a small mistake can lead to resource leak which is fatal for long-live applications (In fact, the two bugs I reported to OpenBSD
are all related resource leak). Therefore I develop a simple C++
library which wraps the libtls
and hope it can free developer from this troublesome problem and put more energy in application logic part.
Long story to short, reading classical source code is a rewarding process, and you can consider to try it yourself.
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK