comunication question

Posted on 2001-06-10
Last Modified: 2008-02-01
I have a server sending data on request to several hundreds of clients.

server and client are written in c++, communication is a class I've written and uses non-blocking sockets with winsock 2.

my question is:
What is the effect on my users if I use SO_LINGER with a timeout of 0, instead of SO_DONTLINGER ?

how will it affect reconnection to the server ?

Question by:guyss
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

Expert Comment

ID: 6176025
LINGER structure is used by an application to set the linger socket option and specify the length of time to wait for unsent data before a socket is closed.

The LINGER stucture as U know has 2 members.
Following steps should be performed to enable or disable linger option.

A) To enable SO_LINGER, the application should set l_onoff to a nonzero value, set l_linger to zero or the desired timeout (in seconds), and call setsockopt.

B) To enable SO_DONTLINGER (that is, disable SO_LINGER) l_onoff should be set to zero and setsockopt should be called

Hence, giving value of timeout of 0 is not equivalent to

Enabling SO_LINGER with a nonzero timeout on a nonblocking socket is not good.

Author Comment

ID: 6176046
I wanted to know what the effect would be, I know how to do it...

Accepted Solution

djbusychild earned 100 total points
ID: 6176093
if you do SO_LINGER with 0 time out it'll forcefully shut the connection off meaning it'll just terminate connection without giving the queued up packets a chance to be sent out. If you set SO_DONTLINGER then although it'll return immediately without blocking, te packets will get a chacne to be sent out
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!


Author Comment

ID: 6176126
I use closesocket when I detect a disctonnection from the server, I use my own keep-alive/tiemout mechanism.

will the other side of the socket get any different response than when using SO_DONTLINGER ?

will I have any problems when the user attempts to reconnect, (i.e - open another socket for the same port and ip address) ?


Expert Comment

ID: 6177948
well, when you have SO_DONTLINGER you won't be able to bind again to the same port/ip until the timer on the underlying layer has expired.

Author Comment

ID: 6179997
how would this be detected ? a failure in opening the socket again ? I never saw this happen.

Expert Comment

ID: 6182106
I've not tried this under Windows. When I was doing development under Sun, I experience that bind will fail if I try to bind immediately after closing.
LVL 11

Expert Comment

ID: 6814513
I think you forgot this question. I will ask Community Support to close it unless you finalize it within 7 days. Unless there is objection or further activity,  I will suggest to accept "dbusychild" comment(s) as an answer.

If you think your question was not answered at all, you can post a request in Community support (please include this link) to refund your points.
The link to the Community Support area is:

Please do not accept this comment as an answer!

Expert Comment

ID: 6833231
Per recommendation comment force/accepted by

Community Support Moderator
Experts Exchange

Featured Post

On Demand Webinar: Networking for the Cloud Era

Ready to improve network connectivity? Watch this webinar to learn how SD-WANs and a one-click instant connect tool can boost provisions, deployment, and management of your cloud connection.

Question has a verified solution.

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

In days of old, returning something by value from a function in C++ was necessarily avoided because it would, invariably, involve one or even two copies of the object being created and potentially costly calls to a copy-constructor and destructor. A…
IntroductionThis article is the second in a three part article series on the Visual Studio 2008 Debugger.  It provides tips in setting and using breakpoints. If not familiar with this debugger, you can find a basic introduction in the EE article loc…
The goal of the video will be to teach the user the concept of local variables and scope. An example of a locally defined variable will be given as well as an explanation of what scope is in C++. The local variable and concept of scope will be relat…
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…

688 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