R socketConnection/make.socket():任何保持listen()的方法吗?

Der*_*urk 10 sockets r

[免责声明:我对套接字的了解非常生疏,我刚刚进入R,所以如果我错过了一些完全明显的东西,请指出它!]

如果我没有理解用于创建和管理插座,即(稀疏文件)R的功能socketConnectionmake.socket,看来,创建一个服务器套接字(时server=TRUE),以下的道德相当于进行:

s = socket(yada yada);
listen(s, ...);
s2 = accept(s, ...);
close(s, ...);
Run Code Online (Sandbox Code Playgroud)

现在我可以使用s2但无法循环处理积压的传入连接s.这或多或少是正确的吗?在处理第一个连接后,有没有办法继续监听并继续处理其他传入连接?

Tom*_*mmy 2

我也想知道这个问题的答案!...但与此同时,我至少可以建议一种有一些限制的解决方法:

如果您知道将连接多少客户端,那么以下操作应该可行。

在服务器上:

n=2         # Number of clients
port=22131

slist=vector('list',n)
# Connect to all clients
for(i in 1:n) slist[i] <- socketConnection('localhost', port=port, server=TRUE)

# Wait for a client to send data, returns the client index 
repeat {
  avail <- which( socketSelect(slist) )[[1]]
  # ...then read and process data, rinse, repeat...
}
Run Code Online (Sandbox Code Playgroud)

在每个客户端上:

port=22131
# Connect to server
s <- socketConnection('localhost', port=port)
# ...then send data...
writeLines(c('foo', 'bar'), s)
Run Code Online (Sandbox Code Playgroud)