トラックバックもとの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から自前で送るように。
#}のあとにも;がアルのは癖です(爆)
2006-12-09 03:53:54[プログラミング]
この記事へのトラックバックURL: https://www.asmusic.jp/ASHARD/score/tb.cgi/yu-oishi/20061208_1
手動トラックバック