システムプログラム(第7回): http-server.c(常に同じ内容を返す HTTP サーバ(forkなし版))

                                       筑波大学 システム情報系 情報工学域
                                       新城 靖
                                       <yas@cs.tsukuba.ac.jp>

このページは、次の URL にあります。
http://www.coins.tsukuba.ac.jp/~syspro/2022/2022-07-06/http-server.html
あるいは、次のページから手繰っていくこともできます。
http://www.coins.tsukuba.ac.jp/~syspro/2022/
http://www.coins.tsukuba.ac.jp/~yas/

http-server.c

http-server.cは、HTTP で要求を受け取り、 HTTで常に一定の内容を返すサーバである。

主要部分は、講義資料のメインのページにある。 このページにあるもの、その他の細かい部分である。

print_my_host_port_http()

print_my_host_port_http() は、Web ブラウザや telnet で接続する時のヒントを表示する。
 138:	#define HOST_NAME_MAX 256
 139:	void
 140:	print_my_host_port_http( int portno )
 141:	{
 142:	        char hostname[HOST_NAME_MAX+1] ;
 143:	
 144:	        gethostname( hostname,HOST_NAME_MAX );
 145:	        hostname[HOST_NAME_MAX] = 0 ;
 146:	        printf("open http://%s:%d/index.html\n", hostname, portno );
 147:	}
 148:	
print_my_host_port()参照。

chomp()

chomp() は、行末の \n\r を削除する関数である。 Perl や Ruby 等のスクリプト言語にも同名で類似の動作を行う関数がある。
 149:	char *
 150:	chomp( char *str )
 151:	{
 152:	        int len ;
 153:	
 154:	        len = strlen( str );
 155:	        if( len>=2 && str[len-2] == '\r' && str[len-1] == '\n' )
 156:	        {
 157:	                str[len-2] = str[len-1] = 0;
 158:	        }
 159:	        else if( len >= 1 && (str[len-1] == '\r' || str[len-1] == '\n') )
 160:	        {
 161:	                str[len-1] = 0;
 162:	        }
 163:	        return( str );
 164:	}
 165:	

tcp_sockaddr_print()

tcp_sockaddr_print()と同じ。

tcp_peeraddr_print()

tcp_peeraddr_print()と同じ。

sockaddr_print()

sockaddr_print()と同じ。

tcp_acc_port()

tcp_acc_port()と同じ。

fdopen_sock()

fdopen_sock()と同じ。 echoのクライアント側 とも同じ。
Last updated: 2022/06/15 10:45:22
Yasushi Shinjo / <yas@cs.tsukuba.ac.jp>