我在机器上运行了一个很长的ruby脚本,我想通过将它分成小函数并将套接字作为参数发送来重新组织它:
#!/usr/bin/env ruby
def prepare data, my_socket
# some calculations
my_socket.write data
end
# execution starts here
tcpsocket = TCPSocket.open host, port
data = "xxx"
prepare(data, tcpsocket)
不幸的是我无法测试。
编辑:既然我明白我不应该这样做(我稍后会读到这个主题),这就是我所做的:#!/usr/bin/env ruby
def prepare data
my_array = []
# some calculations
my_array << data
end
# execution starts here
tcpsocket = TCPSocket.open host, port
data = "xxx"
my_array = prepare data
my_array.each do |m|
my_socket.write m
end
答案 0 :(得分:1)
tcpsocket
是给定套接字端点的本地标识符(文件描述符)。
通过将一个主机的文件描述符发送到另一个主机,您无法实现任何目标。如果没有托管文件描述符的内核(或进程),tcpsocket
就没有任何意义。通常,内核将具有文件描述符和套接字结构的映射。如果将tcpsocket
文件描述符发送到另一端,则另一端将没有相应的套接字结构。
因此,对传递的文件描述符的操作将失败,文件描述符错误。在最坏的情况下,如果远程主机上的进程有另一个具有相同值的文件描述符,那么这将导致意外的事情!