recdvb 1.2.0および元となったrecpt1 httpサーバー版RC4はアクセス元のIPアドレスからホスト名を確認できない場合に「gethostbyname failed」のメッセージが出力されて視聴ができない。ソースを見るとgethostbyaddrが失敗した時に出力されているのでメッセージが間違っている気もするが、gethostbyaddrで得られたホスト名はクライアント接続時に出力される「connect from: hoge.hogehoge.jp [192.168.0.35] port 52427」といったメッセージでしか使われていない為、これらの処理をまるごと削除してみた。
recdvb 1.2.0の場合はrecpt1.cの829行目、840〜846行目を削除、847行目の「 [%s]」と「 peer_host->h_name,」を削除してmake、make installすることで、前述のエラーは出なくなり、接続時からのメッセージにはホスト名が表示されなくなったが、問題なく視聴できるようになった。以下、該当部分の元ソース。
827 while(1){ // http-server add- 828 if(use_http){ 829 struct hostent *peer_host; 830 struct sockaddr_in peer_sin; 831 832 len = sizeof(peer_sin); 833 834 connected_socket = accept(listening_socket, (struct sockaddr *)&peer_sin, &len); 835 if ( connected_socket == -1 ){ 836 perror("accept"); 837 return 1; 838 } 839 840 peer_host = gethostbyaddr((char *)&peer_sin.sin_addr.s_addr, 841 sizeof(peer_sin.sin_addr), AF_INET); 842 if ( peer_host == NULL ){ 843 fprintf(stderr, "gethostbyname failed\n"); 844 return 1; 845 } 846 847 fprintf(stderr,"connect from: %s [%s] port %d\n", peer_host->h_name, inet_ntoa(peer_sin.sin_addr), ntohs(peer_sin.sin_port));
尚、recpt1 httpサーバー版RC4の場合は「recpt1 httpサーバー版RC4 ホスト名無しクライアント対策patch」なるものが当時のDTVアップローダのPT1 関係ファイル置き場にあるので、こちらを使う方が良いかも知れない。