Re: ioctl always returns 0
Re: ioctl always returns 0
- Subject: Re: ioctl always returns 0
- From: Vincent Lubet <email@hidden>
- Date: Mon, 18 Apr 2005 10:14:25 -0700
Don't worry the value is too be treated as a boolean: 0 means offs
and anything else means on.
That you always get 8 is an implementation detail (8 correspond to
the bit field position where the information is stored in the kernel
socket data structure).
Vincent
On Apr 14, 2005, at 3:43 AM, Mahesh Vyas wrote:
We tried following but it failed
int val1 = 1;
setsockopt(socket,SOL_SOCKET,SO_KEEPALIVE,(char*)&val1,sizeof(val1));
Infact we also tried getting the SO_KEEPALIVE value using getsockopt
before and after doing setsockopt
In both the case it is coming out to be 8.
Are we missing something ?
-----Original Message-----
From: Vincent Lubet [mailto:email@hidden]
Sent: Wednesday, April 13, 2005 3:00 AM
To: Mahesh Vyas
Cc: email@hidden; Abhishek Jain
Subject: Re: ioctl always returns 0
This is normal, the TCP protocol has been designed to survive very
long
loss of connectivity so there is no idle timer by default.
You should set the socket option SO_KEEPALIVE to force the networking
stack to check the peer is responding -- see man page setsockopt(2).
In addition you may want to use the TCP option TCP_KEEPALIVE to
specify
the idle time used when SO_KEEPALIVE is enabled.
Vincent
On Apr 12, 2005, at 6:44 AM, Mahesh Vyas wrote:
Hi
The code below works fine if the client crashes. However, if there is
a power failure or a shut down of the client machine, the code
doesn't
yield the desired result and the server machine is not able to detect
the client disconnect.
Could you suggest something for this?
Rgds
Abhishek
-----Original Message-----
From: Vincent Lubet [mailto:email@hidden]
Sent: Thursday, March 04, 2004 8:57 PM
To: Mahesh Vyas
Cc: email@hidden
Subject: Re: ioctl always returns 0
On Mar 3, 2004, at 10:59 PM, Mahesh Vyas wrote:
ioctl(mSocket,FIONREAD,&lDgramSize) always returns 0 irrespective of
socket is closed or open.
Our aim is , when client quits server should find out with above API
whethe client still running or not.
This is not the correct way to find out the peer is disconnected.
Rather you should use recv() with the MSG_PEEK flags:
n = recv(mSocket, &buffer, 1, MSG_PEEK);
if (n == -1)
if (errno == EWOULDBLOCK)
no data
else
other error handling
else if (n == 1)
data is available
else if (n == 0)
peer is disconnected
Vincent
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Macnetworkprog mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden