套接字不支持操作 - 在ruby中发送到(2)

时间:2016-11-05 03:51:14

标签: ruby sockets

我尝试键入ruby UDPsocket服务器端实践,这里是给定的客户端代码:

require 'socket'
ip = "127.0.0.1"
port = 8888
flag = Socket::MSG_OOB # MSG_PEEK , MSG_WAITALL
client = UDPSocket.new
client.send("udp socket test message", flag, ip, port) code here

但是当我运行该文件时,命令行告诉我

Operation not supported on socket - sendto(2) for "127.0.0.1" port 8888 (Errno::EOPNOTSUPP)

我只是搜索所有ruby doc和我可以访问的每个网站,但我没有看到任何解释,有人可以提供帮助吗?

顺便说一句,这是我的服务器端代码,我不确定它是否正确,或许可以看看:

require 'socket'
socket = UDPSocket.new
socket.bind('127.0.0.1',8888)
data = "udp socket test message"
data, addr = socket.recvfrom(1024) 
puts "From addr: '%s', msg: '%s'" % [addr.join(','), data]
socket.close

谢谢

1 个答案:

答案 0 :(得分:1)

来自man send

  

MSG_OOB
  在支持这一概念的套接字上发送带外数据(例如,类型为SOCK_STREAM);底层协议还必须支持带外数据

因此,您尝试在UDP(SOCK_DGRAM)套接字上使用用于TCP(SOCK_STREAM)的标志。难怪它抱怨不支持该标志。