TCPによる送受信について、listen()関数でエラーになってしまいます

こんにちは。

お世話になります。

 

RX63NのスターターキットでTCPによるデータ送受信機能を実装中です。

RX63Nをサーバとしてクライアントの接続要求を待つ処理を追加したのですが、

ソケットAPIモジュールのlisten()関数でエラーが返ってきてしまいます。

listen()関数内で呼ばれるtcp_acp_cep()の戻り値が-17(パラメータエラー)となっていることをデバッガで確認しました。

 

T4のドキュメントより、この関数のパラメータエラーは引数cepid、tmoutが不正な値であることを示しています。

実際にこれら引数として渡しているのは以下となっています。

 

cepid:ソケットIDから算出された値(2:デバッガで確認)

tmout:TMO_NBLK(TMO_FEVRでも試しました)

 

問題があるとしたらcepidだと思うのですが、何をどうしてよいのかわからず困っております。

 

どなたかご教示お願いいたします。

Parents
  • ジュドさん

    こんにちは、シェルティです。

    ご推察の通り cepid 絡みの問題と思います。

    config_tcpudp.c に tcp_ccep[]構造体があって、これでソケットの数を決められます。
    {0, 0, 0, 0, 1460, callback}, と書いてある1行が1ソケット分の定義です。
    これを増やして確かめてみてはいかがでしょうか。

    あとは、ソケットAPIが少しクセのある実装(ITRON TCP/IPの上位にどうにかしてソケットを被せた感じ)ですので、
    一度ソケットAPIを剥がして、ITRON TCP/IP(tcp_acp_cep())を直接操作する方法で動作確認を
    進めてみるのも良いかと思います。

    以上です
  • シェルティさん。

    こんにちは。返事が遅くなってしまいすみません。

    アドバイスありがとうがございます。

     

    現在、TCP/IPを直接操作する方向で進めています。全然進んでいませんが…(汗

    ソケットAPI使用の方は、エラーをそのままにしておくのも気持ち悪いので対応中です。

    tcp_ccep[]構造体を増やしてみたのですが、

    tcp_acp_cep()に入ると「”tcp_api_slp()”に対して使用できるソースがありません」

    となってしまいます。

    下の画像より、tcp_api_slp()の引数に何も渡していないためそうなってしまうようです。

    ということは、通信の受付口を設定できていないのだと思っています。

     

  • ジュドさん

    こんにちは、シェルティです。

    tcp_api_slp()はTCP/IPの内部でTCPの処理待ち状態のときに呼び出される関数ですね。
    特に不正動作ではないです。tcp_acp_cep()を呼び出しているのならば、通信相手からの
    接続を待っている状態ですね。

    ここで通信相手(たとえばPCのTeratermのTCP/IP接続)からRX63N側に対してTCP接続開始すると
    RX63NのTCP接続待ち受け(tcp_acp_cep()呼び出しと受付口tcp_crep[]のポート番号設定値)と、
    通信相手のTCP接続開始が繋がります。

    あとは、RX63Nスタータキットをお持ちであるならば、
    サンプルそのものを改造していって、TCP/IPの挙動を把握していくのが効率が良いと思います。

    www.renesas.com/.../D6000791.html

    TCP/IPの通信の確認の前に、パソコンとRX63Nが正しく同じネットワークに(論理的に)接続できているか確認するために、
    pingコマンド(コマンドプロンプトで実行できます)で導通確認してみるのも良いと思います。

    Wiresharkでパケットログを見ながら実験するのも良いですね。
    何がNGで通信ができないのかがすぐわかります。

    以上です
  • ジュドさん:
    ほやです。

    「~に対して使用できるソースがありません」のメッセージですが、
    ライブラリなどソースコードがない部分のアドレスで表示されているのであれば
    単に「見せられるソースコードがない(ソースがあったら教えて)」という意味に過ぎません。
    メッセージが赤色だから何かの異常のように見えてしまうのですが。

    この場合もtcp_api_slp() (APIの完了待ち?)はライブラリの関数なので
    そこに入ること自体は異常ではないのでは。
Reply
  • ジュドさん:
    ほやです。

    「~に対して使用できるソースがありません」のメッセージですが、
    ライブラリなどソースコードがない部分のアドレスで表示されているのであれば
    単に「見せられるソースコードがない(ソースがあったら教えて)」という意味に過ぎません。
    メッセージが赤色だから何かの異常のように見えてしまうのですが。

    この場合もtcp_api_slp() (APIの完了待ち?)はライブラリの関数なので
    そこに入ること自体は異常ではないのでは。
Children
No Data