On 5/12/20 5:25 PM, Russell Almond wrote: > > Thanks for the link. Somehow the information about how to join the > bugzilla site was not available at bugzilla and buried in the CRAN web > site instructions on reporting bugs (which pointed me at Bugzilla and > not the page you showed me). > > The example is pretty minimal. I left the tracing statements > (flog.trace()) and the toJSON, fromJSON in as I thought they might > provide some context for another method of approaching my problem. > > It looks like I'm getting better results using socketConnection() > rather than read.socket(), so I'll pursue that solution (but still > file a bug report, as it seg faults are never good). > Thanks, a report with that example would be useful - if using socketConnection() fixes the problem, I guess it makes it more likely that the bug is in R, but one never knows before the case is fully analyzed.
Tomas > --Russell > > > On 5/12/20 5:30 AM, Tomas Kalibera wrote: >> Thanks for the report, but it is unlikely anyone would be able to >> help just based on this code fragment. We need a small and minimal >> but complete reproducible example. That example should not use any >> contributed packages (a contributed package may be corrupting memory, >> which may cause R to crash). >> >> It is easy to get a bugzilla account - please see >> https://www.r-project.org/bugs.html for more and for advice on how to >> write bug reports. You could even send the bug report to this list, >> but the key thing is the reproducible example. >> >> Thanks >> Tomas >> >> On 5/11/20 9:40 PM, Russell Almond wrote: >>> >>> I'm trying to implement a connection between two processes using a >>> simple socket mechanism. The messages are rather long object stored >>> as JSON. >>> >>> R is crashing with a segmentation fault when I try to read my test >>> message (which is 5305 bytes long). I first send the length in >>> bytes and then I send the actual message. >>> >>> Here is my R code: >>> >>> library(jsonlite) >>> library(futile.logger) >>> listenerloop <- function (port) { >>> flog.trace("Opening Socket on port %d",port) >>> sock <- make.socket("localhost",port,server=TRUE) >>> on.exit({ >>> close.socket(sock) >>> flog.trace("Closing Socket on port %d",port) >>> }) >>> repeat { >>> ## Input a hunk of stuff up to a blank line. >>> output <- character() >>> repeat { >>> inlen <- read.socket(sock,loop=TRUE) >>> flog.trace("Got message of length %s",inlen) >>> if (inlen=="quit") break >>> inmess <- fromJSON(read.socket(sock,as.integer(inlen)),false) >>> outmess <- doProcess(inmess) >>> output <- toJSON(outmess) >>> flog.trace("Sending message of length %s",nchar(output)) >>> write.socket(sock,paste(nchar(output),"\n")) >>> write.socket(sock,output) >>> } >>> } >>> } >>> >>> doProcess() is the payload, but it is not getting that far. Instead >>> I get: >>> >>> > listenerloop(12525) >>> TRACE [2020-05-11 15:21:00] Opening Socket on port 12525 >>> TRACE [2020-05-11 15:21:03] Got message of length 5305 >>> {"StudentRecord":null,"Message":{"_id":624,"app":"ecd://terc.edu/Zoombinis/","uid":2,"context":"PIZZA_PASS1","sender":"DataArcade","mess":"Last >>> >>> Transaction","timestamp":"1570279373.109","processed":false,"data":{"PP29_N_Rejects_Current_Z":0,"PP106_Avg >>> >>> >>> >>> *** caught segfault *** >>> address 0x7ffdf533d0a8, cause 'memory not mapped' >>> >>> Traceback: >>> 1: read.socket(sock, as.integer(inlen)) >>> 2: fromJSON(read.socket(sock, as.integer(inlen)), false) >>> 3: listenerloop(12525) >>> >>> I have two questions: >>> >>> 1) Can somebody file a bug report on this? I strongly suspect that >>> there is an uncaught error in read.socket(). I'm happy to help, but >>> I don't have access to bugzilla. >>> >>> 2) Anybody know how to read/write long messages to a socket in R? >>> >>> Thanks in advance. >>> --Russell Almond >>> >>> >>> >>> >> > -- > Russell G. Almond > https://ralmond.net > alm...@acm.org [[alternative HTML version deleted]] ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel