C中的UDP套接字服务器无法接收数据包

时间:2015-10-01 05:56:25

标签: c sockets select network-programming udp

我有一个UDP客户端(代表其他客户端代理),它为我的UDP服务器执行sendto(),它使用select()FD_ISSET()来处理所有传入的请求。我的客户端和服务器都在同一个盒子里。

(客户端)

sock_fd = socket(AF_INET, SOCK_DGRAM, 0 );

setsockopt(socket_fd, SOL_IP, IP_PKTINFO, &enabled, sizeof(int));
setsockopt(socket_fd, SOL_IP, IP_TRANSPARENT, &enabled, sizeof(int));
setsockopt(socket_fd, SOL_IP, IP_RECVORIGDSTADDR, &enabled, sizeof(int));
setsockopt(socket_fd, SOL_SOCKET, SO_REUSEADDR, &enabled, sizeof(int));

/* client_addr points to the source IP (i.e. other client's IP) */
bind(sock_fd, (const struct sockaddr *)client_addr, sizeof(struct sockaddr));

/* dst_addr points to this box's IP */
sendto(sock_fd, dns_packet_buffer, data_len, 0,
            (const struct sockaddr *)dst_addr, sizeof(struct sockaddr));

(服务器) - 显然不是完整的代码摘录!

FD_ZERO(&read_set);
FD_SET(fd, &read_set);
select(num_of_fds, &read_set, &write_set, &error_set);
if (FD_ISSET(fd, read_set))
    reply(fd, source_addr.sa.sa_family);

sendto()返回成功但FD_ISSET()返回false的情况下?这似乎发生在我身上!

如果我不代表其他客户端代理(即其他客户端直接与服务器通信),那么它可以工作。只有当我尝试代理时才会出现一些错误。我做错了什么,在哪里?

0 个答案:

没有答案