10. Blocking and Non-Blocking Socket

10. Blocking and Non-Blocking Socket I/O

In client server applications, when a client makes a request to a server, server processes the request and sends back a response. For this, both the client and the server first needs to establish a connection with one another through sockets (TCP or UDP). In the last few tutorials, we also saw, how a client can send data in form of request to the server and the server can operate on it, and then send a response back to the client.

Blocking Socket I/O

By default, TCP sockets are placed in a blocking mode. This means that the control is not returned to your program until some specific operation is complete.
For example, if you call the connect() method, the connection blocks your program until the operation is complete. On many occasions, we don't want to keep our program waiting forever.
Taking another example, when we write a web browser client that connects to a web server, we should consider a stop functionality that can cancel an active connection process in the middle of its operation. This can be achieved by placing the socket in the non-blocking mode.

Non-Blocking Socket I/O

We can call setblocking(1) to set up blocking or setblocking(0) to unset blocking. Let's understand it with the help of an example. First of all, let's consider a Blocking Socket:
block_client.py
#!usr/bin/python
    
    import socket
    
    sock = socket.socket()
    
    host = socket.gethostname()
    sock.connect((host, 12345))
    sock.setblocking(1)
    
    # Or simply omit this line as by default TCP sockets
    # are in blocking mode
    
    data = "Hello Python\n" *10*1024*1024    # Huge amount of data to be sent
    assert sock.send(data)                    # Send data till true
 

block_server.py
#!usr/bin/python
    
    #block_server.py
    
    import socket
    
    s = socket.socket()
    
    host = socket.gethostname()
    port = 12345
    
    s.bind((host,port))
    s.listen(5)
    
    while True:
    conn, addr = s.accept()        # accept the connection
    
    data = conn.recv(1024)
    while data:                    # till data is coming
    print data
    data = conn.recv(1024)
    print "All Data Received"    # Will execute when all data is received
    conn.close()
    break

Now, run block_server.py first and then block_client.py. You'll notice that the server keeps on printing Hello Python. This will go on and on till all the data is sent. In the above code the line All Data Received will not be printed for long time, because as the client has to send a large number of string, which will take time, and until then the socket input-output will get blocked.
What's going on here? The send() method will try to transmit all the data to the server, while the write buffer will get filled up. The kernel will put the process to sleep until the data in the buffer is transferred to the destination and the buffer is empty again. When the buffer becomes empty, the kernel will wake the process up again to get the next chunk of data that is to be transferred. In short, your code will block and it will not let anything else proceed.

Now consider a Non-Blocking Socket
#!usr/bin/python
    
    # non_blocking_client.py
    
    import socket
    
    sock = socket.socket()
    
    host = socket.gethostname()
    sock.connect((host, 12345))
    sock.setblocking(0)            # Now setting to non-blocking mode
    
    data = "Hello Python\n" *10*1024*1024    # Huge amount of data to be sent
    assert sock.send(data)                    # Send data till true
Now, if we run the non_blocking_client.py, you'll notice that the program will run for a small time, it will print the last line "All Data Received" and soon terminate.
What's going on here? Here the client did not send all the data. When we make a socket non-blocking by calling setblocking(0), it will never wait for the operation to complete. So when we call the send() method, it will put as much data in the buffer as possible and return.
# Table of Contents:
28. Changing User Agent

# Ebooks for Network Programming with Python



Categories

[ Video ] CNC Programming (2) [Apps] F# Programming Tutorial (1) 100 ebooks for engineers (2) 2048 GAME (1) AC Circuits (1) AC Circuits Tutorial (1) AC Circuits Tutorials (2) Accounting Basics (1) Activities Manual to accompany Programmable Logic Controllers (1) Adeept Ultimate Starter Kit for Arduino (1) Adobe Photoshop CC (1) Advanced Business Application Programming (1) Advanced Excel Charts Tutorial (1) Alarm (1) Amazon App store (165) amazon ebook (86) Amazon Web Services (1) Amazon Web Services Tutorials (1) Amplifiers (1) Amplifiers tutorial (3) and Design (2) android game (17) Animal Connect (1) Apache Flume Tutorial (1) Apache Kafka Tutorial (1) Apache Pig Tutorial (1) Apache Solr Tutorial (1) Apache Storm Tutorial (1) Apex Programming (2) App Android (157) Apple Books (3) Applications (8) Applied Petroleum Reservoir Engineering (1) Apps (197) Apps Android (15) appstore (14) Appstore For Android (1) Arduino (1) Artificial Intelligence (1) Assembly Code Examples (1) Assembly Programming (2) Assembly Programming Tutorial (2) Attenuators Tutorial (2) Attract Wealth Hypnosis PRO (1) AutoCAD For Dummies (1) AutoCAD Tutorial (1) Awk Programming Tutorial (1) AWS (1) BABY LEARN TO ALPHABET (1) Basic Electricity (1) Basic Electronics (1) Basics of Mechanical Engineering (1) Beetle Run (1) Best Apps (52) Best Apps Android 2017 (6) Best games (19) Big Data Analytics with R (1) Binary Numbers (1) Binary Numbers Tutorial (1) Block Puzzle (1) Body Language (1) Boiler House (1) Books list for engineer (1) Boolean Algebra (1) Boolean Algebra Tutorial (6) Boost Your Productivity Quickly (1) Bottle Shooting (1) Build Your Own CNC Machine (Technology in Action) (1) Business Negotiation Skills (2) C Programming (1) C Programming Code Examples (1) C Programming Langguage (1) C Standard Library (2) C# (1) C# programming Examples (1) C# Tutorial (1) C++ Primer (1) C++ Programming (1) C++ Programming Standard Library (1) C++ Programming Tutorial FULL (1) C++ Tutorial (1) Catch Duck (1) Caveman Run (1) Clean Architecture (1) Clojure Programming Tutorial (1) CNC Books (42) CNC Control Setup for Milling and Turning (1) CNC G-Code (9) CNC G-Code tutorial (4) CNC Lathe Machine Programming (1) CNC M-Code Tutorial (2) CNC Machine Tutorial (7) CNC Milling Machine CNC Program Examples (4) CNC programming (60) CNC Programming Basics (7) CNC Programming Examples (40) CNC Programming Handbook (2) CNC Programming Reference (1) CNC Programming using Fanuc Custom Macro B (1) CNC Programming: Basics & Tutorial Textbook (1) CNC Tips (4) COBOL Programming (2) Code Examples (1) Compass (1) Complete Electronics Self-Teaching Guide with Projects (1) Computer Fundamentals (1) Computer programming (1) Computer programming ebooks (1) Control Theory Tutorial (1) CouchDB Tutorial (1) Critical Thinking (1) Crystal Reports (1) Csharp (1) Dart Programming Language (1) Dart Programming Tutorial (1) Delft Pneumatic Bipeds (1) Demon Jump (1) Digital Signal Processing (1) Diodes (1) DISCOVER THE SCIENCE AND TECHNOLOGY OF THE FUTURE (1) Drill CNC (1) Drilling CNC Program (1) ebook (81) ebook kindle amazon (66) ebook Kobo (15) eBooks (187) Elasticsearch Tutorial (1) Electrical Transformers And Rotating Machines (1) Electricity and Magnetism (1) Electromagnetism (1) Electronic Systems (1) Electronic Transformers (1) Electronics DC Circuit (1) Electronics Filters (1) Electronics from the Ground Up (1) Electronics Inductors (1) Electronics Oscillator (1) Electronics Resistors (1) Elenco AM/FM Radio Kit (Combines ICs & Transistors) (1) Elenco Practical Soldering Project Kit (1) Elixir Language (1) Elixir Tutorial (1) Embedded Systems (1) Embedded systems C++ programming Tutorial (3) Embedded Systems Tutorial (1) Erlang Programming (1) Erlang Programming Tutorial (1) Euphoria Programming Language (1) Excel Formulas and Functions (1) Excel Functions & Formulas (1) Excel VBA (1) F# Programming (1) Facebook Advertising For Dummies (1) Facebook Marketing (1) Final Mission Game (1) Flag Game (1) Fortran Programming Tutorial (1) Funny jokes (1) Fuzzy Logic Tutorial (1) G-Code and M-Code (1) G-Code Reference (1) G-Code Tutorials (1) Games (18) Getting Started with 3D Printing (1) Go Programming Language (1) GOLD MINER+ (1) Good book about President Trump * Donald Trump Books * (1) Groovy Tutorial (1) Guide To 3D Printing (2) Guide To Accounting Basics (1) Guide to Amazon Marketplace (1) Guide To Anger Management (1) Guide To Arduino (2) Guide To Artificial Intelligence (1) Guide To Artificial Neural Networks (1) Guide To Assertiveness (1) Guide To AWS (2) Guide To Basic Electronics (1) Guide To Bitcoin (1) Guide To Business Negotiation Skills (1) Guide To Business Writing Skills (1) Guide To CNC Programming (2) Guide To Critical Thinking (1) Guide To Digital Circuits (1) Guide To Digital Electronics (1) Guide To Food and Beverages Services (1) Guide to Java Persistence API (1) Guide To Java XML (1) Guide To Java.io package (1) Guide To jMeter (1) Guide To JPA (1) Guide To JSoup (1) Guide To Make money online (1) Guide To MS Project (1) Guide To Neo4j (1) Guide To Photoshop (1) Guide to Pinterest Marketing (1) Guide To PyQt (1) Guide To Python (3) Guide To Rust Programming (2) Guide To SAP BODS (1) Guide To SAP BW on HANA (1) Guide to Snapchat (1) Guide To Solidworks (2) Guide To Spring Web Services (1) Guide To Struts 2 (1) Guide To SWING (1) Guide To T-SQL (1) Guide To Tcl- Tk (1) Guide To TestNG (1) Guide To Wireless Communication (1) Guide To WordPress (1) Guide To Xamarin (1) Guide To XPath (1) Guide To XSLT (1) Handbook of Natural Gas Transmission and Processing (1) Harmony - Hypnosis Meditation (1) Haskell Programming (1) Hibernate Tutorial (1) Hostinger Tutorials (1) How to Learn Microsoft Access VBA Programming Quickly (1) How to learn Microsoft Office Powerpoint Quickly! (2) How To R Programming (2) How to Use Snapchat (1) ibooks (3) Inter Process Communication (IPC) (1) Internet of Things Tutorial (1) Introducing Arduino (1) Introducing AWK (1) Introducing Boiler House (1) Introducing Clojure (2) Introducing Hibernate (1) Introducing Neo4j (1) Introducing OBIEE (1) Introducing RC Networks (1) Introducing SAP MM (1) Introducing SAP Payroll (1) Introducing Transistors (1) Introducing XPath (1) Introducing XSLT (1) Introduction to Cgi/Perl (1) Java 8 (1) JavaFX tutorial (2) JCL Tutorial (1) Job Control Language (1) Joyo ZOMBIE 20 Watt Mini Tube Head in new banTamp Series New and Nice! (1) JSP Tutorial (1) Jump and Fly (1) Jumping Penguin (1) KDB (1) KDB+ Tutorial (1) Kill Zombies Game (1) Kindle Amazon (3) Kindle Books (3) kindle ebook (19) kit (3) Lathe CNC (1) Learn C++ Standard Library (1) Learn Apache Spark (1) Learn Apache Tajo (1) Learn Apex Programming (1) Learn Avro (1) Learn Basics of Computers (1) Learn Big Data (1) Learn C Programming (1) Learn Cassandra (1) Learn COBOL (1) Learn Computer Programming (1) Learn Crystal Reports (1) Learn D Programming (1) Learn Data Mining (1) Learn Data Structure and Algorithms (1) Learn Database Management System (1) Learn Digital Image Processing (1) Learn Diodes (1) Learn Electronics (1) Learn Electronics and Digital Electronics by GoLearningBus (1) Learn Electronics with Arduino (1) Learn Euphoria (1) Learn Food Production Operations (1) Learn Genetic Algorithms (1) Learn Go Programming (1) Learn Haskell Programming (1) Learn How to Make Money with a Success Mindset (1) Learn Interpersonal skills (1) Learn Java.langPackage (1) Learn Java.util package (1) Learn LISP (1) Learn Objective-C on the Mac (1) Learn RC Networks (1) Learn SAP ABAP (1) Learn SAP Payroll (1) Learn Scala Programming (1) Learn Scripts (1) Learn Social Intelligence (1) Learn Social Media Marketing (1) Learn Swift (1) Learn VB.net By Examples (1) Learn Windows 10 (1) Learning Perl (1) Lignocellulose Biorefinery Engineering: Principles and Applications (1) LISP Programming Language (1) Logic Gates (1) Logic tutorials (1) Logo Programming (1) Logo programming language (1) LOLCODE Programming Language (1) Make Money Online Tutorial (1) Make: Electronics: Learning Through Discovery (1) Mastering Node.js (1) MathTeX: LaTeX Mathematics (1) MATLAB for Beginners (1) Microsoft Project Standard 2016 (1) MILLIONAIRE FREE (1) Miscellaneous Circuits (1) MongoDB (1) MongoDB Tutorial (1) Move The Fruit (1) MySQL (1) MySQL Tutorial (2) NAO robot course (1) Network Programming with Python (1) Node.js (1) NumPy Tutorial (1) OAuth 2.0 (1) OAuth 2.0 Tutorial (1) OBIEE Tutorial (1) Objective-C Programming Language (1) Operational Amplifiers (1) Parrot Programming (1) Parrot Programming Tutorial (1) PHP 7 Tutorial (1) Pipe Drafting and Design (1) PL/SQL Tutorial (1) Power Electronics (1) Power Electronics: Converters (2) Power Supplies (1) Programming Groovy (1) Programming of CNC Machines (2) Programming Rust: Fast (1) Programming with MATLAB for Beginners (1) Python (2) Python 3 Tutorial (2) Python Pandas Tutorial (1) Python Programming For Beginners (1) Python Tutorial (2) R Programming (2) R Programming Examples (1) Reasoning Web. Semantic Interoperability on the Web (1) Reference books ICT (1) Report Studio Developer (1) Rexx Tutorial (1) Robot Programming (1) robotics tutorials (1) RoutCad de Luxe CAD-CAM Software CNC Mill (1) Rust Programming (1) Rust Programming Tutorial (1) Safe Systems Development (1) Safety Valve (1) Salesforce Tutorial (1) SAP Advanced Planning and Optimization (1) SAP Basis Tutorial (1) SAP BO Analysis Edition For OLAP (1) SAP Business Explorer (1) SAP Business Planning and Consolidation (1) SAP Business Workflow (1) SAP BW on HANA (1) SAP MM - Tutorial (1) SAP_GRC Tutorial (1) Schaum's Outline of Basic Circuit Analysis (1) Script Programming Tutorials (1) Scripts (1) Sematic web (1) Sequential Logic (1) Sign Language ASL | BSL (1) Sinusoidal Oscillators and Waveform Generators (1) SnapChat (1) Snapchat Tutorials (1) Socket.IO Tutorial (1) Software (3) Solidworks tutorials (2) SOLISWORKS (2) SOLISWORKS ebooks (1) SOLISWORKS Tutorials (2) Spring Batch Tutorial (1) Spring Framework (1) Spring MVC Tutorial (1) Spring Tutorial (1) SQL Fundamentals Certification tutorial (1) STATUS AND QUOTES (1) Steam Engineering Principles and Heat Transfer (1) Steam trapping and air venting (1) TestNG Tutorial (1) The Best Apps for Tutorials (1) The best Kindle (1) The CNC Cookbook (1) The complete guide to Arduino for beginners (1) The Essential Guide to Digital Signal Processing (1) Third Edition (1) Tips (33) Tips and Tricks (3) Tips for CNC Users (33) Top 10 best sellers on the Amazon Kindle (1) Turtle Run and Jumper (1) Tutorials (312) Understanding Hot Water Heating Systems (1) VB.Net Programming Tutorial (1) VBA Tutorial (1) Video (1) Waveform Generators (1) Ways To Make Money - Work At Home (1) WordPress Tutorial (1) Write DAX (1) Xamarin Tutorial (1) XML (1) XML Technologies (1) XML Technologies Tutorial (1) YouTube Marketing (1)