>>> We've been here before. If you can find a way to tell that the sender
>>> has gone away without trying to read from the input file descriptor, it
>>> would also solve the problem of "delay" hanging around when the other
>>> end has disappeared. We had a discussion about this about a year ago (?)
>>> and concluded that it was not possible.
>>>       
>> Non-blocking read?
>>     
>
> No good. You don't actually want to read the input if it is there.
>
>   
>> Some other system call?
>>     
>
> Nobody came up with anything when we discussed this before.


I took a look at this awhile back and it's possible to detect far end 
disconnections by setting the socket to async IO.  The idea is arrange 
for Unix to send the process a signal when IO is pending on the socket, 
but it also works for disconnects.  It goes something like this:

flag = 1;
ioctl(sockfd, FIOASYNC, &flag);
flag = getpid();
setpgid(0, 0);
ioctl(sockfd, SIOCSPGRP, &flag);

I tested a hack similar to this with exim-4.66 on Solaris 10 and CentOS 
4.4.  Works great.

Jack


-- 
## List details at http://www.exim.org/mailman/listinfo/exim-users 
## Exim details at http://www.exim.org/
## Please use the Wiki with this list - http://www.exim.org/eximwiki/

Reply via email to