WEBサーバ作成しています。
index.htmlは表示できるのですがJPEGやfaviconが読めなくてずっとアクセス状態になってしまいます。
どうしたらいいのでしょうか?
lang
1#include <stdio.h> 2#include <stdlib.h> 3#include <sys/socket.h> 4#include <sys/fcntl.h> 5#include <arpa/inet.h> 6#include <string.h> 7#include <sys/wait.h> 8#include <unistd.h> 9 10#define MAXPENDING 5 11 12 13void httpd(int sockfd); 14 15 16void DieWithError(char *errorMessage){ 17 perror(errorMessage); 18 exit(1); 19} 20 21int CreateTCPServerSocket(unsigned short port){ 22 int sock; 23 struct sockaddr_in echoServAddr; 24 25 if((sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) 26 DieWithError("socket() failed"); 27 28 memset(&echoServAddr, 0, sizeof(echoServAddr)); 29 echoServAddr.sin_family = AF_INET; 30 echoServAddr.sin_addr.s_addr = htonl(INADDR_ANY); 31 echoServAddr.sin_port = htons(port); 32 33 if(bind(sock, (struct sockaddr *) &echoServAddr, sizeof(echoServAddr)) < 0) 34 DieWithError("bind() failed"); 35 36 if(listen(sock, MAXPENDING) < 0) 37 DieWithError("listen() failed"); 38 39 return sock; 40} 41 42 43int AcceptTCPConnection(int servSock){ 44 int clntSock; 45 struct sockaddr_in echoClntAddr; 46 unsigned int clntLen; 47 48 clntLen = sizeof(echoClntAddr); 49 50 if((clntSock = accept(servSock, (struct sockaddr *) &echoClntAddr, &clntLen)) < 0) 51 DieWithError("accept() failed"); 52 53 printf("Handling client %s\n", inet_ntoa(echoClntAddr.sin_addr)); 54 55 return clntSock; 56} 57 58int send_msg(int fd, char *msg) { 59 int len; 60 len = strlen(msg); 61 62 if ( write(fd, msg, len) != len ){ 63 fprintf(stderr, "error: writing."); 64 } 65 return len; 66} 67 68 69 70/*==========================*/ 71int main(int argc,char *argv[]){ 72 73 int servSock; 74 int clntSock; 75 unsigned short ServPort; 76 pid_t pid; 77 unsigned int childProcCount = 0; 78 int pipefd[2]; 79 int status; 80 81 82 int len; 83 int read_fd; 84 char buf[2048]; 85 86 char meth_name[16]; 87 char uri_addr[256]; 88 char http_ver[64]; 89 90 char *uri; 91 char *value; 92 char *uri_file; 93 94 char *ret; 95 96 97 if(argc != 2){ 98 fprintf(stderr, "Usage: %s <server port>\n",argv[0]); 99 exit(1); 100 } 101 102 ServPort = atoi(argv[1]); 103 servSock = CreateTCPServerSocket(ServPort); 104 105 106 107 for(;;){ 108 clntSock = AcceptTCPConnection(servSock); 109 110 sigignore(SIGCHLD); 111 112 int fd[2]; 113 pipe(fd); 114 115 pid = fork(); 116 117 if(pid == 0){ 118 //子プロセス 119 if (read(clntSock, buf, 2048) <= 0 ) { 120 fprintf(stderr, "error: reading a request.\n"); 121 exit(0); 122 } 123 else { 124 sscanf(buf, "%s %s %s", meth_name, uri_addr, http_ver); 125 printf("%s %s %s\n", meth_name, uri_addr, http_ver); 126 127 //get 128 if (strcmp(meth_name, "GET") != 0) { 129 send_msg(clntSock, "501 Not Implemented"); 130 } 131 uri_file = uri_addr+1; 132 read_fd = open(uri_file, O_RDONLY, 0666); 133 if (read_fd == -1) { 134 send_msg(clntSock, "404 Not Found"); 135 } 136 else { 137 send_msg(clntSock, "HTTP/1.1 200 OK\r\n"); 138 send_msg(clntSock, "text/html\r\n"); 139 send_msg(clntSock, "\r\n"); 140 141 while((len = read(read_fd, buf, 1024)) > 0) { 142 if (write(clntSock, buf, len) != len) { 143 fprintf(stderr, "error: writing a response.\n"); 144 break; 145 } 146 } 147 close(read_fd); 148 } 149 } 150 } 151 else if(pid == -1){ 152 DieWithError("fork():failed"); 153 exit(-1); 154 } 155 156 157 158 } 159} 160 161 162
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。