Brian Perry | 2 May 2012 20:39
Picon
Favicon

Lisp Server Disconnect and Threading Issues

Greetings,

I've been working on adapting existing Lisp code to communicate with a socket server with the end goal of allowing a couple of different web based clients (one using Flash, another in Processing) to communicate with the Lisp server.  I've run into a couple of specific roadblocks and was wondering if anyone could help.

The first issue is that the lisp server is crashing when a client disconnects.  I'm seeing an error similar to the following:

-------
debugger invoked on a END-OF-FILE in thread #<THREAD RUNNING {1003707001}>:
  end of file on #<SB-SYS:FD-STREAM for "a socket" {10037EFDE1}>
-------

If we could get past this one, we'd be able to move forward quite a bit.

The second issue is that the Lisp server currently blocks when one connection is made, preventing other clients from connecting simultaneously.  I've assumed that sbcl's threading might help here, but I didn't have any luck with it myself (most likely due to lack of experience).

I based the server on the following example:


I'd be happy to provide more info if it helps.

Thanks,

Brian
------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Sbcl-help mailing list
Sbcl-help <at> lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sbcl-help
Leslie P. Polzer | 3 May 2012 12:07
Picon

Re: Lisp Server Disconnect and Threading Issues


Brian Perry wrote:
> Greetings,
>
> I've been working on adapting existing Lisp code to communicate with a socket server
> with the end goal of allowing a couple of different web based clients (one using Flash,
> another in Processing) to communicate with the Lisp server.  I've run into a couple of
> specific roadblocks and was wondering if anyone could help.
>
> The first issue is that the lisp server is crashing when a client disconnects.  I'm
> seeing an error similar to the following:
>
> -------
> debugger invoked on a END-OF-FILE in thread #<THREAD RUNNING {1003707001}>:
>   end of file on #<SB-SYS:FD-STREAM for "a socket" {10037EFDE1}>

You want to catch that exception, or check for end of file before you read,
or disable the condition throw on EOF (if possible).

> The second issue is that the Lisp server currently blocks when one connection is made,
> preventing other clients from connecting simultaneously.  I've assumed that sbcl's
> threading might help here, but I didn't have any luck with it myself (most likely due to
> lack of experience).

I haven't looked at your code, but I suppose some kind of non-blocking
or event-based I/O might be possible. On the other hand it might still
be easier to get used to threads since it's not that hard...

  Leslie

>
> I based the server on the following example:
>
> http://jsnell.iki.fi/tmp/echo-server.lisp
>
> I'd be happy to provide more info if it helps.
>
> Thanks,
>
> Brian
>
> ------------------------------------------------------------------------------
> Live Security Virtual Conference
> Exclusive live event will cover all the ways today's security and
> threat landscape has changed and how IT managers can respond. Discussions
> will include endpoint security, mobile security and the latest in malware
> threats.
> http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/_______________________________________________
> Sbcl-help mailing list
> Sbcl-help <at> lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/sbcl-help
>

--

-- 

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
Brian Perry | 3 May 2012 22:21
Picon
Favicon

Re: Lisp Server Disconnect and Threading Issues

Thanks for the reply Leslie.  I dug a little deeper into what's possible regarding exception handling, and it does seem likely that would allow us to work around / more gracefully handle this error case.

As for the second issue - I'm still relatively new to Lisp, but I'm always willing to learn.  Is there any particular resource you (or others reading) would suggest as a crash course on threading for scbl?

Brian

On Thursday, May 3, 2012 at 6:07 AM, Leslie P. Polzer wrote:


Brian Perry wrote:
Greetings,

I've been working on adapting existing Lisp code to communicate with a socket server
with the end goal of allowing a couple of different web based clients (one using Flash,
another in Processing) to communicate with the Lisp server. I've run into a couple of
specific roadblocks and was wondering if anyone could help.

The first issue is that the lisp server is crashing when a client disconnects. I'm
seeing an error similar to the following:

-------
debugger invoked on a END-OF-FILE in thread #<THREAD RUNNING {1003707001}>:
end of file on #<SB-SYS:FD-STREAM for "a socket" {10037EFDE1}>

You want to catch that exception, or check for end of file before you read,
or disable the condition throw on EOF (if possible).


The second issue is that the Lisp server currently blocks when one connection is made,
preventing other clients from connecting simultaneously. I've assumed that sbcl's
threading might help here, but I didn't have any luck with it myself (most likely due to
lack of experience).

I haven't looked at your code, but I suppose some kind of non-blocking
or event-based I/O might be possible. On the other hand it might still
be easier to get used to threads since it's not that hard...

Leslie



I based the server on the following example:


I'd be happy to provide more info if it helps.

Thanks,

Brian

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and
threat landscape has changed and how IT managers can respond. Discussions
will include endpoint security, mobile security and the latest in malware
threats.
Sbcl-help mailing list


--

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Sbcl-help mailing list
Sbcl-help <at> lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sbcl-help
Brian Perry | 5 Jun 2012 05:09
Picon
Favicon

Re: Lisp Server Disconnect and Threading Issues

As a follow up to my previous message, I'm looking for someone who would be interested in taking on some work to resolve these issues.  Some additional info:

ICE Lab at MIT - SBCL Programmer to Debug Existing Server Program

The Imagination, Computation, and Expression Laboratory (ICE Lab) at MIT is looking for an SBCL programmer to help debug issues with an existing Lisp socket server program.  The server will eventually handle connections from multiple web-based clients in support of a number of student projects - experience with threading and exception handling in SBCL are a plus.  Project is likely to be smaller in scope since much of the system is already functional.  Remote candidates are fine, but strong communication skills are required.  Contact berry <at> mit.edu for more details.

Thanks,

Brian

On Wednesday, May 2, 2012 at 2:39 PM, Brian Perry wrote:

Greetings,

I've been working on adapting existing Lisp code to communicate with a socket server with the end goal of allowing a couple of different web based clients (one using Flash, another in Processing) to communicate with the Lisp server.  I've run into a couple of specific roadblocks and was wondering if anyone could help.

The first issue is that the lisp server is crashing when a client disconnects.  I'm seeing an error similar to the following:

-------
debugger invoked on a END-OF-FILE in thread #<THREAD RUNNING {1003707001}>:
  end of file on #<SB-SYS:FD-STREAM for "a socket" {10037EFDE1}>
-------

If we could get past this one, we'd be able to move forward quite a bit.

The second issue is that the Lisp server currently blocks when one connection is made, preventing other clients from connecting simultaneously.  I've assumed that sbcl's threading might help here, but I didn't have any luck with it myself (most likely due to lack of experience).

I based the server on the following example:


I'd be happy to provide more info if it helps.

Thanks,

Brian

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Sbcl-help mailing list
Sbcl-help <at> lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sbcl-help

Gmane