接受 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()
发送出站数据包。
我正在尝试一个简单的程序来使用 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()
发送出站数据包。