|
みなさん、回答をありがとうございます。 やってみて、うまく格納できているみたいです。 今は、read()の方をうまくできていないので、ちゃんと 受け取りの構造体に格納できないので、これからなんとか 受け取り側で見れるようにします。 でも、うまくCを書けていなかったのがわかりました。 本当にありがとうございました。 |
|
以前は、uptimeの質問に対してレスありがとうございました また、質問があるのですが、 現在サーバ間(UNIX/AIX)でNISの設定をしようとしています。 今回、NISを設定してあるもののバージョンを上げるために、一度NISの設定 を解除して、バージョンをあげて、再設定しようと思っています。 一度試しで行なって見たのですが、Clientのほうで、Server側でマップを更新した後に、ログインができなくなってしまったのです。 (whoamiコマンドで反応がなくなってしまいます) それで、一度NISを外しまして、再設定を行なった際に、 マップの更新後に、stopsrc -s ypbind startsrc -s ypbind -a "ypsetme" ypset (ServerのIPアドレス) を行なったところ、無事に設定する事が出来ました。 ここで、質問なのですが、今度違う場所で同じ作業があるのですが、 マップ更新後に、whoamiコマンドで行けるか確認して stopsrc…などのコマンドを打って設定する他にいい方法があるのでしょうか? 私的にはNISの解除の方法がおかしいのかなと思っています。 (1./etc/passwdを戻す、2.smitでNISを解除する) よろしければ、皆様のご意見を頂きたく思います。 都合上レスが明日になるかもしれませんがよろしくお願い致します |
|
初めまして。 現在UNIXでのSocket通信プログラムを書いているのですが selectシステムコールとFD_ISSETマクロとの 関係がよくわからずにコードを書いていたところ バグに悩まされています。 select()を使いタイマで割り込み動作を監視しながら recv()で受信を行うというプログラムを書いています FD_ZERO( &fdset ); FD_SET( m_Sockfd, &fdset ); while(recv_size != 0) { work_fdset = fdset; ret = select( 64, &work_fdset, NULL, NULL, &time_out ); if( ret == -1) { 異常処理 } =============================== 割り込み監視 =============================== if( FD_ISSET( m_Sockfd, &work_fdset )) { data_size = recv( m_Sockfd, (void*)(m_pData + m_DataSize)) } m_DataSize += data_size; recv_size -= data_size; } ソースはだいたいこのような感じなのですが、 割り込み監視部分等でコネクションの切断 コネクションの再接続等を行っていると select()の返り値は0でタイムアウトなのですが FD_ISSET()マクロの方は返り値が真になってしまい recv()の発行を行うけれども実際はデータはきておらず recv()で処理がとまってしまい、割り込みの監視ができなくなって しまうというようなバグが発生しています。 ならばselectとFD_ISSETの返り値が真である場合にのみ recv()を発行すればよいと思うのですが なぜこういうケースがでるのかわからなければ 信用し得る修正にならないので書きこみさせてもらいました。 過去ログなどを検索して調べてみましたが 自分なりのなっとくいく回答がえられませんでした。 よければこういうケースになる条件、回避方法等 お教えいただければと思います。 |
|
追記ですが、下記のプログラムは 1ポート1コネクションのプログラムです |
|
>>1553 CoreFighter > CoreFighter さんへ。質問に対する回答をもらっても、 > 何の反応も示さないなら、質問するのはご遠慮下さい。 すいませんでした。以後気をつけます。 |
|
自己回答。先ほど質問を書きこんだものですが、 あれからいろいろサイトなどを再びまわって 間違いに気づきました。 お騒がせしました。 ようは 1ポート1コネクションなら select()の第一引数に取得したソケット記述子+1を指定すれば よかったんですね。 |