A comprehensive guide for Linux Network (Socket) programming