Yeah, I can do that (in fact, that was the first thing I did, to cover 
up the problem).  I was hoping to fix the problem, but if the code is 
ugly and not going to change, I'll just assume the error is in the 
message handling in j.exe.

Henry Rich

On 3/3/2012 7:04 PM, bill lam wrote:
> I reported the same problem a decade ago.  The workarond was exactly
> what Eric suggested - to a run a timer event.  Furthermore running
> timer event to check socket without async socket would be even
> better because that can be run in jwdp.
>
> Сбт, 03 Мар 2012, Henry Rich писал(а):
>> I have a file server written in J6.02.  It works most of the time - for
>> thousands of transactions - and then locks up.  I have tracked it down
>> to a missing event.  At the point of failure:
>>
>> there is one socket, and that is the socket I am listening on.  It is
>> marked asynchronous;
>>
>> the socket shows up as readable in sdselect'' (indicating pending
>> connection);
>>
>> if I issue   socket_handler ''   from the keybosrd the system will start
>> up again and run fine.
>>
>>
>> Apparently an FD_ACCEPT event has been lost.
>>
>>
>>
>> At this point I will have to build a large load-generating setup to
>> create enough traffic to fail.  I would prefer to troubleshoot this from
>> the source code, so I am asking for someone with access to the source
>> for 6.02 j.exe to send me the relevant modules for inspection, or to see
>> if they can find a problem in the area.  (My understanding is that the
>> source for this bit is not open-source).
>>
>>
>>
>> Below is the relevant part of my socket system.  I'm including it just
>> to show that what I'm doing is simple and robust.  The listening socket
>> is handled in the last 2 lines of socket_handler, which calls the recv
>> verb to do the accept.  When the system is locked up, socklist has one
>> atom, as does sockobj (and they are correct - remember, a manual call to
>> socket_handler gets things moving again)
>>
>> socket_handler =: 3 : 0
>> NB. Look for a writable socket with space
>> if. #wsocklist do.
>>     'v r w e' =. sdselect_jsocket_ ($0);wsocklist;($0);0
>>     done =. $0
>>     for_l. sockobj {~ socklist i. w do.  done =. done , 0 = send__l '' end.
>>     wsocklist =: wsocklist -. done # w
>> end.
>> 'v r w e' =. sdselect_jsocket_ socklist;($0);($0);0
>> for_l. sockobj {~ socklist i. r do. recv__l '' end.
>> )
>>
>> recv =: 3 : 0
>> NB. sock is the socket number for the object
>> if. 0 = 0 {:: 'r c' =. sdaccept_jsocket_ sock do.
>> NB. this part configures the clone socket, not part of the problem
>>     if. #callback do. cloneinfo =: cloneinfo callback~ c end.
>>     o =. conew>  {. cloneinfo
>>     c create__o }. cloneinfo
>> end.
>> ''
>> )
>>
>>
>> Henry Rich
>> ----------------------------------------------------------------------
>> For information about J forums see http://www.jsoftware.com/forums.htm
>
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to