[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[plamo:25404] Re: TCP のport が解放されるとき



イクバルです。

以下のプログラムですが、どいうふうに終了させますか?
シグナルを処理する部分を見当たらないので、勝手に Ctrl-C とかをして終了させる
ではないかな。。

そうすると、while 1 のループから出ることがなくなるので、ソケットをちゃんと閉
じないことが原因じゃないですかね。。


> 早間です。
> socket を使用したTCP の受信プログラム(サーバ側)プログラムを終了さ
> せてすぐに同じ受信プログラムを起動させると bind でエラーになります。
> しばらくしてから(1〜2分)再度実行させると実行出来ます。
> port が解放されていないのが原因だと勝手に考えているのですが、何が
> 原因なのでしょうか。
>
> 概略次のように使っています。
>    C で作っています。
>    fork は使っていません。
>    TCP port はご覧のように一般ユーザが使用できるものです。
>    また、shutdown と close に付けたリターンコードの判定は概要で
>    errno を調べていますが、エラーは起こっていません。
>
>    sokfd=socket(AF_INET, SOCK_STREAM, 0):
>    if (sokfd <0) {puts("socket error"); exit(0);}
>    serv_addr.sin_family = AF_INET;
>    serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
>    serv_addr.sin_port = htons(3400);
>    rtn=bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr));
>    if (rtn < 0){puts(bind error");exit(0);}
>    listen(sockfd, 5);
>    newsocket=accept(sockfd, (struct sockaddr *) &cli_addr,   &clilen);
>    while ( 1 ) {
>        send (newsocket ,message ,strlen(message),0);
>        read(newsocket, buff, sizeof(buff) );
>        shutdown(newsocket);
>        if (rtn < 0){puts("shutdown error");}
>        close (newsocket);
>        if (rtn < 0 ){puts("close error");}
>        break;
>   }
>   rtn=shutdown(sockfd,2);
>   if (rtn < 0){puts("shutdown error");}
>   rtn=close (sockfd);
>   if (rtn < 0){puts("close error");}
>
> -- 早間 義博
>     メイリングリストから送られてくるメイル以外届きません。
>
>


-- 
You can't start worrying about what's going to happen.  You get spastic
enough worrying about what's happening now.
                -- Lauren Bacall

Follow-Ups
[plamo:25405] Re: TCP のportが解放されるとき, 早間
References
[plamo:25403] TCP のportが解放されるとき, 早間

[検索ページ] [メール一覧]
Plamo ML 公開システム