ゲスト[ログイン]

おおいしゆうのASミュージックスコア登録CGI

おおいしゆうが日々のフォルテール演奏の記録を書き続けるCGI(日記じゃないです。blogでもないです)

工画堂スタジオ 『スマイル☆シューター ~ふぁーすと☆ちけっと~』OHP

パルフェ10周年ポータル パルフェ10周年寄せ書き企画

Aozora Melodyのパーフェクト動画公開中!

日 (今日 最終日)
日 ~ 日 (全部)
フォルテール総合情報サイト
ASミュージック
ポータル

同曲演奏状況
CSV登録
工画堂スタジオ&ヤマサ 『スマイル☆シューター ~ふぁーすと☆ちけっと~』応援中!
工画堂スタジオ 『ソルフェージュ~La finale~』OHP
トラックバックもとのURLのデータを取得して自ページへのリンクがあるかを確認するため、久々にsocketプログラミングを。どうせならIPv6にも対応させようということで調査。

どうもgetaddrinfoという便利な関数がアルようで、それにホスト名、ポート番号などを食わせると自動的に名前解決してsocketに渡せるsockaddr構造体を設定してくれるようです。

というわけでクライアントなら次のようなソースで行けるようです(サーバでもconnectの代わりにbind→listenすればいいはず)

int sockdsc;
struct addrinfo hints; //getaddrinfoに渡すパラメータ設定用
struct addrinfo *res0,*res; //getaddrinfoから帰ってくる値
char *host; //接続先のhostnameを格納しておく

memset(&hints,0,sizeof(hints));
hints.ai_family=AF_UNSPEC; // IPv4,v6どちらでも。AF_INET,AF_INET6とすると固定
hints.ai_socktype=SOCK_STREAM; // TCP。 SOCK_DGRAMだとUDP
if(getaddrinfo(host,"http",&hints,&res0)!=0){return -1;};
//ポートを数字で指定したい場合はhints.ai_flags=AI_NUMERICSERV;として"http"の代わりに"80"などと
for(res=res0;res!=NULL;res=res->ai_next) // addrinfo構造体はリストになっているので辿りながら…
{
if((sockdsc=socket(res->ai_family,res->ai_socktype,res->ai_protocol))<0){continue;};
if(connect(sockdsc,res->ai_addr,res->ai_addrlen)<0){close(sockdsc);continue;};
break;
};
if(res==NULL){return -1;}; //リストで帰ってきたアドレス全て接続失敗
freeaddrinfo(res0); //getaddrinfoで作られた構造体を削除

// sockdscを使ってreadしたりwriteしたり

close(sockdec);


というわけで、トラックバック元のリンク確認機能がつきました。あと、余波でトラックバック送信も借り物のJavaScriptから自前で送るように。

#}のあとにも;がアルのは癖です(爆)
名前: ひとこと:
この記事へのトラックバックURL: https://www.asmusic.jp/ASHARD/score/tb.cgi/yu-oishi/20061208_1手動トラックバック