我有一个服务器和一个客户机在两台不同的机器上运行,在这两台机器上,客户机send()s,但服务器似乎没有收到消息。服务器使用select()来监视任何传入连接/消息的套接字。我可以看到,当服务器接受一个新连接时,它会更新fd_set数组,但不管客户端send()消息如何,它总是返回0。连接是TCP的,机器被一个路由器隔开,所以丢弃数据包的可能性很小。
我有一种感觉,可能不是客户的问题,而是客户的问题,但我不确定如何定位问题区域。

    while(1)
{
    readset = info->read_set;
    ready = select(info->max_fd+1, &readset, NULL, NULL, &timeout);

}
上面是服务器端代码,其中服务器有一个无限期运行select()的线程。
rv = connect(sockfd, (struct sockaddr *) &server_address, sizeof(server_address));
printf("rv = %i\n", rv);
if (rv < 0)
{
    printf("MAIN: ERROR connect() %i:  %s\n", errno, strerror(errno));
    exit(1);
}
else
    printf("connected\n");

sleep(3);

char * somemsg = "is this working yet?\0";
rv = send(sockfd, somemsg, sizeof(somemsg), NULL);
if (rv < 0)
    printf("MAIN: ERROR send() %i:  %s\n", errno, strerror(errno));
printf("MAIN: rv is %i\n", rv);
rv = sendto(sockfd, somemsg, sizeof(somemsg), NULL, &server_address, sizeof(server_address));
if (rv < 0)
    printf("MAIN: ERROR sendto() %i:  %s\n", errno, strerror(errno));
printf("MAIN: rv is %i\n", rv);

这是客户端,它连接并发送消息并返回
connected
MAIN: rv is 4
MAIN: rv is 4

最佳答案

fd_set readset有问题,而不是我认为有问题的地方。支持qrdl引起我的注意。

09-30 16:26
查看更多