ここに私が今使っているコードの一部があります。私ははっきりとselect()関数は、擬似コードで、ここで、どのように動作するか理解していないソケットタイムアウト:それは動作しますが、なぜ、どのように、主にselect()関数ですか?
fd_set fdset;
struct timeval tv;
int flags = fcntl(sockfd, F_GETFL);
fcntl(sockfd, F_SETFL, O_NONBLOCK);
connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr));
FD_ZERO(&fdset);
FD_SET(sockfd, &fdset);
tv.tv_sec = 3;
tv.tv_usec = 0;
if (select(sockfd + 1, NULL, &fdset, NULL, &tv) == 1)
{
int so_error;
socklen_t len = sizeof so_error;
getsockopt(sockfd, SOL_SOCKET, SO_ERROR, &so_error, &len);
if (so_error == 0) {
cout << " - CONNECTION ESTABLISHED\n";
}
} else
{
cout << " - TIMEOUT\n";
exit(-1);
}
はやる、
bool showOnce = true;
connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr))
while(stillConnecting) /*Some kind of flag of connection status*/
{
if(showOnce)
{
showOnce = false;
cout << "Connecting";
}
}
if(connected) /*Another possible flag if it exists*/
return true;
else
return false;
この擬似コードを実装するためにとにかくあり、私は本当に何をしたいですこれらのフラグは存在しますか?
EDIT:上記のコードのselect関数でもsockfd + 1はなぜですか?なぜそれに追加されますか?
'select()'のドキュメントを読んだときに何を学びましたか? –
私はまだ実際には学んでいませんでした。申し訳ありませんが、私は主に組み込み開発を行い、簡単な通信のための簡単なPCプログラムを書く必要がありました。私は現在、このコメントを書くときにselect関数のmsdnページを読んでいます。私は擬似コードのようにソケットの状態をチェックするために使用することができると思います。しかし、どのように把握しようとしています。私はそこに行っています:) – vilive