我正在尝试一个简单的程序来使用select()
和UDP,但是当我将数据发送到UDP端口时,程序退出时出现错误"操作不受支持"致电accept()
时。
我的代码来自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
答案 0 :(得分:0)
accept()
仅适用于连接协议,如TCP(SOCK_STREAM
)。它不适用于无连接协议,如UDP(SOCK_DGRAM
)。这在accept()
manpage:
accept()系统调用与基于连接的套接字类型(SOCK_STREAM,SOCK_SEQPACKET)一起使用......
...
错误
...
EOPNOTSUPP
引用的套接字不是SOCK_STREAM类型。
在UDP中,您只需要bind()
套接字,然后您可以使用recvfrom()
来读取入站数据包,使用sendto()
来发送出站数据包。