【发布时间】:2015-07-21 22:29:11
【问题描述】:
我正在尝试使用原始套接字在 ruby 中编写自己的 UDP 实现,用于教育目的。
这是我目前所拥有的:
require 'socket'
addr = Socket.pack_sockaddr_in(4567, '127.0.0.1')
socket = Socket.new(
Socket::PF_INET,
Socket::SOCK_RAW,
Socket::IPPROTO_RAW
)
socket.bind(addr)
socket.recvfrom(1024)
我正在这样测试它:
require 'socket'
udp = UDPSocket.new
udp.send "Hello World", 0, "127.0.0.1", 4567
但是对recvfrom 的调用被无限期阻塞。
如果我把它改成这样:
socket = Socket.new(
Socket::PF_INET,
Socket::SOCK_DGRAM,
Socket::IPPROTO_UDP
)
它当然有效,因为这是接受 UDP 数据包的系统级方式。
如何在原始套接字上接收 UDP 数据包?
明确一点:我想自己处理实际的 UDP 协议(解码数据报并进行校验和)!
【问题讨论】:
标签: ruby sockets udp network-protocols