代码之家  ›  专栏  ›  技术社区  ›  Vandana Chadha

接受UDP选择错误

  •  -1
  • Vandana Chadha  · 技术社区  · 6 年前

    我正在尝试使用一个简单的程序 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 回复  |  直到 6 年前
        1
  •  0
  •   Remy Lebeau    6 年前

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

    accept()系统调用与基于连接的套接字类型(sock_stream、sock_seqpacket)一起使用…

    错误

    E不支持
    引用的套接字不是sock_stream类型。

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