设置多个UDP套接字

时间:2013-04-03 15:59:24

标签: c sockets udp

我需要有关设置3个UDP套接字的帮助。套接字是远程端口号的一部分,必须是61000,61001和61002。 我需要设置这个套接字,因为我应该在select函数上使用它们来发送和接收数据。

我尝试了很多方法,但没有人正常工作。 我知道这是设置ONE套接字的正常程序:

int set_socket() {

  /* get a datagram socket */
  sock = socket(AF_INET, SOCK_DGRAM, 0);
  if (sock == SOCKET_ERROR) {
    printf ("socket() failed, Err: %d \"%s\"\n", errno,strerror(errno));
    exit(1); 
  } 
  OptVal = 1;
  ris = setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char *)&OptVal, sizeof(OptVal));
    if (ris == SOCKET_ERROR)  {
      printf ("setsockopt() SO_REUSEADDR failed, Err: %d \"%s\"\n", errno,strerror(errno));
      exit(1);
    }
  /* name the socket */
  Local.sin_family      =   AF_INET;
  Local.sin_addr.s_addr =   htonl(INADDR_ANY);
  Local.sin_port        =   htons(local_port_number_UDP);
  ris = bind(sock, (struct sockaddr*) &Local, sizeof(Local));
  if (ris == SOCKET_ERROR)  {
    printf ("bind() failed, Err: %d \\n",errno);
    exit(1);
  }
  /* assign our destination address */
  To.sin_family               = AF_INET;
  To.sin_addr.s_addr          = inet_addr(string_remote_ip_address_UDP);
  To.sin_port                 = htons(remote_port_number_UDP);

}

如何使用不同的远程端口号设置所有3个套接字?我必须为每个套接字使用不同的struct(本地和To)?

谢谢,抱歉我的英语不好。

1 个答案:

答案 0 :(得分:0)

  

我必须为每个套接字使用不同的struct(Local和To)吗?

不,您可以为其他两个套接字的Local重复使用相同的sin_port(在更改bind之后)。如果您在每次需要时为另一个套接字更改To,则可以重复使用相同的sin_port