2. PROGRAMMING WITH SOCKETS