[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[plamo:25404] Re: TCP のport が解放されるとき
-
From:Iqbal Abdullah
-
Date:Sat, 30 Apr 2005 18:37:24 +0900 (JST)
- Subject: [plamo:25404] Re: TCP のport が解放されるとき
- From: "Iqbal Abdullah" <iqbal@xxxxxxxxxxx>
- Date: Sat, 30 Apr 2005 18:37:24 +0900 (JST)
- Importance: Normal
イクバルです。
以下のプログラムですが、どいうふうに終了させますか?
シグナルを処理する部分を見当たらないので、勝手に 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 公開システム