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
--
regards,
====================================================
GPG key 1024D/4434BAB3 2008-08-24
gpg --keyserver subkeys.pgp.net --recv-keys 4434BAB3
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm