サーバーとクライアントが 2 つの異なるマシンで実行されていますが、クライアントsend()
はサーバーがメッセージを受信していないようです。サーバーはselect()
、着信接続/メッセージのソケットを監視するために採用しています。サーバーが新しい接続を受け入れると、fd_set
配列が更新されますが、クライアントsend()
メッセージにもかかわらず常に 0 が返されることがわかります。接続は TCP で、マシンは 1 つのルーターのように分離されているため、パケットがドロップされる可能性はほとんどありません。
select()
おそらくsend()
/クライアントからではなく、問題である可能性があると感じていsendto()
ますが、問題の領域を特定する方法がわかりません。
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