I believe if you use poll() rather than select(), you should be able to
detect this state. Add a listener for the event POLLPRI.

Regards,
Elias


On 24 July 2014 19:57, Juergen Sauermann <juergen.sauerm...@t-online.de>
wrote:

>  Hi Elias,
>
> given that hardly anybody uses shared variables these days this discussion
> is more on the theoretical side than of practical relevance.
>
> For that reason I would like the solution to be as simple as possible.
> The extra things needed as you state below make things more complicated
> and raise new problems, e.g. unlink the socket while it is still used and
> the like.
>
> Also I have not found a reliable way to figure if a connection is closed
> or not.
> For example if I do *kill -9* of a process that is connected to *APserver*
> then
> *APserver* does not detect this in its *select()* loop.
>
> /// Jürgen
>
>
>
> On 07/24/2014 01:34 PM, Elias Mårtenson wrote:
>
> I did not know about that feature. Interesting. Also interesting that it's
> not supported on OSX.
>
>  That said, I still think Unix domain sockets are good in this case.
> There are just a few things that needs to be done in order to make them
> solid. I think I did most of those things in the native code for the Emacs
> mode.
>
>  These things include:
>
>    - Call unlink() on the socket file before creating it (in case there
>    is one lingering from before).
>    - Call unlink() on the socket when shitting down (we want everything
>    to be clean after shutdown).
>    - When automatically starting the backend (as opposed to manually
>    creating it), compute the filename so that it's reasonably unique. I.e.
>    append the process ID to it or something.
>
> What do you think of this?
>
>  Regards,
> Elias
>
>
> On 24 July 2014 19:26, Juergen Sauermann <juergen.sauerm...@t-online.de>
> wrote:
>
>>  Hi Elias,
>>
>> the idea is this:
>>
>> man 7 unix says:
>>
>>  *abstract:  an  abstract  socket address is distinguished by the fact*
>> *          that sun_path[0] is a null byte ('\0').   The  socket's
>> address  in*
>> *          this namespace is given by the additional bytes in sun_path
>> that are*
>> *          covered by the specified length of  the  address  structure.
>> (Null*
>> *          bytes  in  the  name have no special significance.)*
>>
>> So I *memset()* the entire socket address first and then copy the name
>> to *sun_path,*
>> but starting at  *sun_path[1]* so that *sun_path[0]* remains *0 *(making
>> it an abstract
>> socket).
>>
>> man 7 unix also says:
>>
>> * The abstract socket namespace is a nonportable Linux extension.*
>>
>> That's why I *#define ABSTRACT_OFFSET* to 1 if your OS supports it and
>> you can change it to 0 if not. In the latter case you have to provide a
>> file
>> */tmp/GNU-APL/APserver* manually with proper permissions.
>>
>> This file is having the file permissions that you were after earlier. I am
>> not creating that file because I expect more problems with it than
>> benefits
>> (who owns it, who installs it, what if one user creates it with wrong
>> permissions etc.).
>>
>> My general feeling is that TCP on localhost is much cleaner and maybe I
>> should make
>> that the default.
>>
>> /// Jürgen
>>
>
>
>

Reply via email to