アプリ版:「スタンプのみでお礼する」機能のリリースについて

selectは使用しているソケットのディスクリプタを登録させれば、send、writeシステムコールからのデータの受信等は検知しますよね。
では、コネクション要求(connect)は、検知するのでしょうか?
どなたか回答よろしくお願いします。

A 回答 (3件)

もちろん検知しますよ。


LISTENしているソケットに対しての要求を検知したら
acceptしてやればOKです。

この回答への補足

selectでやってみましたがウマクいきませんでした。
検知もしてないようです。UDPと多重通信を試みているのですがポート番号がTCPとUDPで同じものを使うのはだめなのでしょうか?

補足日時:2003/07/26 15:44
    • good
    • 0

接続を待つ側は、ソケットを生成するときにTCPかUDPかを


指定してソケットを生成していたと思いますが?
あと、ソケット処理の基本としては、接続を受ける側は
生成したソケットでlisten⇒selectを行った形でまつ
ようになると思います。それに大して、相手がconnectした
たら、selectで検知できます。selectの第1パラメータか
なにかに接続待ちするポート番号を指定できたと思います
が、そこらへんは間違っていませんか?
もし、それでもだめなら、コマンドラインなどからnetstat
コマンドで、生成して待ち状態にあるソケットの状態を
確認してみてはどうでしょうか?それで待ち状態になって
いるのでselectがこないというのであれば、接続待ちの
ほうではなく接続しようとしているほうに問題があるので
はないかと思いますが。
    • good
    • 0
この回答へのお礼

うまくできました。
今までできなかったのは送信側のポート番号設定が間違っていたのが原因でした。
御指摘等、ありがとうございます。(^^)

お礼日時:2003/08/04 10:53

できますが、面倒くさいです。

覚悟してください。

先ず、ioctlかfcntlでソケットをnon-blockingモードにしてからconnectを呼びます。connectは必ずエラーで戻ってくるので、エラーを無視し、ソケットがライト可能になるのをselectで待ちます。ソケットがライト可能になったらgetpeername等でconnectの結果を調べます。成功していれば0、タイムアウト等で失敗しれば-1が戻ります。

ioctlやfcntlの仕様はシステムによって異なるので、マニュアルを見てください。キーワードは、O_NONBLOCK、O_NDELAY、FIOSNBIO等です。

なお、acceptについては簡単です。listenに渡したソケットがselectでリード可になれば、即座にacceptが可能です。

この回答への補足

selectでやってみましたがウマクいきませんでした。
検知もしてないようです。UDPと多重通信を試みているのですがポート番号がTCPとUDPで同じものを使うのはだめなのでしょうか?

補足日時:2003/07/26 15:41
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!