• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:bind と mkstemp)

bindとmkstempの使い方に問題が生じる原因とは?

このQ&Aのポイント
  • ソケットプログラミングにおいて、bindとmkstempを使用してユニークなアドレスを作成する際に問題が生じています。
  • mkstempを使用しない場合は正しくソケットファイルが生成されますが、mkstempを使用するとbindに失敗し、Address already in useというエラーメッセージが表示されます。
  • ソケットファイルは正しく生成されているようですが、アイコン表示からするとソケットファイルではないようです。問題の原因を特定できません。

質問者が選んだベストアンサー

  • ベストアンサー
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.1

>なにがいけないのでしょうか。 bindはmkstempで作られた名前のファイルが既に存在する場合は、エラーを返します。従って、bindに与えるファイル名は、存在しないことが条件です。 mkstempはユニークなファイル名を生成すると同時にそのファイルのオープンまで行います。 従って、以下の作業が必要となります。 1)mkstempで作成されたファイルをクローズする。 2)クローズ後、削除する。 3)その後で、bindを呼び出す。 コーディングは以下のようになります。 int fd,ret; ・・・・ fd = mkstemp(client_name.sun_path); if (fd == -1){ perror("mkstemp failed"); exit(1); } ret = close(fd); //クローズ if (ret != 0){ perror("close failed"); exit(1); } ret = unlink(client_name.sun_path); //削除 if (ret != 0){ perror("unlink failed"); exit(1); } printf("socket addr:<%\n",client_name.sun_path); ・・・・・ 尚、 len = sizeof(struct sockaddr); // =16 は誤りで len = sizeof(struct sockaddr_un); // = 110 として下さい。 bindに与える3番目の引数は、client_nameのサイズです。