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

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

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

http-server.c

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

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

ここに掲載されている関数の多くは、coins-syspro.cで定義されている。

print_my_host_port_http()

print_my_host_port_http() は、Web ブラウザや telnet で接続する時のヒントを表示する。
 129:	#define HOST_NAME_MAX 256
 130:	void
 131:	print_my_host_port_http( int portno )
 132:	{
 133:	        char hostname[HOST_NAME_MAX+1] ;
 134:	
 135:	        gethostname( hostname,HOST_NAME_MAX );
 136:	        hostname[HOST_NAME_MAX] = 0 ;
 137:	        printf("open http://%s:%d/index.html\n", hostname, portno );
 138:	}
print_my_host_port()参照。

chomp()

chomp() は、行末の \n\r を削除する関数である。 Perl や Ruby 等のスクリプト言語にも同名で類似の動作を行う関数がある。
 245:	char *
 246:	chomp( char *str )
 247:	{
 248:	        int len ;
 249:	
 250:	        len = strlen( str );
 251:	        if( len>=2 && str[len-2] == '\r' && str[len-1] == '\n' )
 252:	        {
 253:	                str[len-2] = str[len-1] = 0;
 254:	        }
 255:	        else if( len >= 1 && (str[len-1] == '\r' || str[len-1] == '\n') )
 256:	        {
 257:	                str[len-1] = 0;
 258:	        }
 259:	        return( str );
 260:	}

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: 2026/07/03 14:37:20
Yasushi Shinjo / <yas@cs.tsukuba.ac.jp>