接受udp select的错误

时间:2018-05-23 07:35:43

标签: sockets udp

我正在尝试一个简单的程序来使用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

1 个答案:

答案 0 :(得分:0)

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

中明确说明
  

accept()系统调用与基于连接的套接字类型(SOCK_STREAM,SOCK_SEQPACKET)一起使用......

     

...

     

错误
  ...
  EOPNOTSUPP
  引用的套接字不是SOCK_STREAM类型。

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