接受 udp select 的错误

accept error for udp select

我正在尝试一个简单的程序来使用 select() 和 UDP,但是当我将数据发送到 UDP 端口时,程序在调用 accept() 时退出并出现错误 "Operation not supported"。

我的代码来自 Handle multiple socket connections with fd_set and select on Linux,不同之处在于我使用 SOCK_DGRAM 而不是 SOCK_STREAM:

创建套接字
if( (master_socket = socket(AF_INET , SOCK_DGRAM , 0)) == 0)

引用的代码工作正常。

发送UDP数据包,我使用命令:

echo "this is my udp data">>/dev/udp/127.0.0.1/8888

accept() 仅适用于面向连接的协议,如 TCP (SOCK_STREAM)。它不适用于 UDP (SOCK_DGRAM) 等无连接协议。这在 accept() manpage:

中有明确说明

The accept() system call is used with connection-based socket types (SOCK_STREAM, SOCK_SEQPACKET)...

...

Errors
...
EOPNOTSUPP
The referenced socket is not of type SOCK_STREAM.

在UDP中,你只需要bind()套接字,然后你可以使用recvfrom()读取入站数据包,sendto()发送出站数据包。