2012-01-05 7 views
0

プリミティブ呼び出しの連続した順序サーバーのソースコードは、このようなものです:ソケット:私はC.に基本的なサーバを書いた

 
int sfd; 
... 
read(sfd,...); 
write(sfd,...); 
... 

と、クライアントは次のとおりです。

 
int sfd; 
... 
write(sfd,...); 
read(sfd,...); 
... 

これらのプリミティブはどのような順序で呼び出されますか? write(client), read(server), write(server), read(client)。この順番で?そうでない場合は、それを確実にする方法はありますか?

答えて

1

writeおよびreadがブロックしている。最初に呼ばれるのは問題ではありません。サーバー上のreadをクライアントのwriteの前に呼び出すと、readは適切なバイト数を受け取るまでブロックされます。

+0

クライアントでの読み取りと書き込みの両方を実行してから、サーバーで読み取ることはできますか? – svs

+0

はい。サーバ上で 'write'が終了するまで、クライアント上の' read'はブロックされます。 –

+0

私は、クライアントが書いたもの(クライアントでの書き込みと読み取りはサーバで読み取る前に連続して実行される)を読むことが可能であることを意味しましたか? – svs

0

特定の順序を保証する場合は、ミューテックスまたはその他の並行処理ツール(セマフォなど)を使用する必要があります。

あなたのアプリケーションより多くのものが表示されていない限り、おそらく順序は気にしません。非ブロッキングオプションを設定しない限り、対応するwrite()が実行されるまでブロックされます。

+0

ミューテックスとセマフォは、クライアントとサーバが同じマシン上で動作している場合にのみ有効です。 –

関連する問題