0

C でサーバー クライアント ソケット プログラムを作成しようとしていました。タイマーを使用してそれを実現する方法について質問があります。私がやろうとしているのは、サーバーとクライアント間の接続を確立し、読み書き操作を行うことです。サーバー側で「timeval」構造体を使用して select() を使用することについて知りました。しかし、ソケットで一定時間読み取ることができるクライアント側で何をすべきですか。

4

2 に答える 2

0

select()システムコールのtimeval構造で必要なタイムアウトを設定して、クライアントでもまったく同じことを行うことができます。ただし、クライアントでは、ブロッキング モードを使用setsockopt()し、SO_TIMEOUT/SO_RCVTIMEOオプションを使用して、プラットフォームで呼び出されたものに関係なく、タイムアウトを制御する方が簡単です。関連するマニュアルページを確認してください。

于 2012-09-14T07:43:36.567 に答える
0

はい、「setsockopt」を使用したソケットの短い例が必要な場合は正確です。

int mySocket;
struct timeval tv = {0, 0}; // Init to 0 (Or set directly with your values)

mySocket = socket(AF_INET, SOCK_STREAM, 0);
// Set the timeout (If you don't have set directly values)
tv.tv_sec = 10;
tv.tv_usec = 0;
// Set The Timeout On Socket RECV
setsockopt(mySocket, SOL_SOCKET, SO_RCVTIMEO, (char *)&tv, sizeof(struct timeval));
// Set The Timeout On Socket SEND
setsockopt(mySocket, SOL_SOCKET, SO_SNDTIMEO, (char *)&tv, sizeof(struct timeval));
于 2012-09-14T18:23:10.000 に答える