What is Winsock Overlapped I/O?

Posted on 2009-03-29
Medium Priority
Last Modified: 2013-11-13

What is Overlapped I/O as available for sockets in Winsock?

How does it work and why is it more efficient than other i/o models?
Question by:nanderEire
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
  • 2
  • 2
LVL 10

Accepted Solution

Marcjev earned 500 total points
ID: 24014711
You should see overlapped I/O as a kind of assynchronious IO. In your program you start a function call and it returns immediatly.
So WSASend en WSAReceive will return immediatly. You will be able to receive and event when the opperation is complete.
As you can do other things in the time the system is normally in the blocking call, you cal do more efficient programming, like handling the data received in a previous opperation.
But although it has to potential to be more efficient, it's up to you, the programmer, to actually achieve the gain, by programming a more complex program.
LVL 10

Expert Comment

ID: 24014717
Also, when handling multiple connections, you could handle more connections as they are non blocking. So you could use the cpu more effectively. If you have a one to one connection the gain is not as much as having a many to one connection.

Author Comment

ID: 24016611

So what is the difference between the operation of an i/o overlapped and a socket placed in non-blocking mode?
What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.


Assisted Solution

migoEX earned 500 total points
ID: 24016755
With non-blocking socket your "send/recv" will fail with WOULD_BLOCK error code, and you'll have to retry the operation later (probably using some sort of "select"). Buth the asynchronous function continues in the background, and you can later get a notification that it has completed/failed (in form of Event or callback).

Author Comment

ID: 24016929
So you can just keep queueing up the sends without checking the return value to see if each was successful?

Expert Comment

ID: 24017355
Yes. I assume there's some limit, of cause, but in theory you can sedn many requests whithout waiting for any to complete.

Featured Post

Introducing Priority Question

Increase expert visibility of your issues by participating in Priority Question, our latest feature for Premium and Team Account holders. Adjust the priority of your question to get emergent issues in front of subject-matter experts for help when you need it most.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article will show, step by step, how to integrate R code into a R Sweave document
Whether you’re a college noob or a soon-to-be pro, these tips are sure to help you in your journey to becoming a programming ninja and stand out from the crowd.
The viewer will learn how to implement Singleton Design Pattern in Java.
The goal of the video will be to teach the user the difference and consequence of passing data by value vs passing data by reference in C++. An example of passing data by value as well as an example of passing data by reference will be be given. Bot…
Suggested Courses

770 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question