@@ -53,6 +53,7 @@ void Server::acceptGetClientFd(ServerSocket *server_socket)
53
53
54
54
void Server::keventProcess ()
55
55
{
56
+ int flag = 0 ;
56
57
serverConnect (); // config server의 서버별 kqueue등록
57
58
if ((_kq._kq_fd = kqueue ()) == -1 )
58
59
std::cout << " errorororororo" << std::endl;
@@ -92,10 +93,11 @@ void Server::keventProcess()
92
93
}
93
94
case CLIENT_SOCKET:
94
95
{
95
- ClientSocket *client_socket = dynamic_cast <ClientSocket *>(_socket[_kq._event_list [i].ident ]);
96
- std::cout << client_socket << std::endl;
96
+ ClientSocket *client_socket = reinterpret_cast <ClientSocket *>(_socket[_kq._event_list [i].ident ]);
97
+ std::cout <<" client socket = " << client_socket << std::endl;
97
98
int error = 0 ;
98
99
100
+ std::cout << " ehlo" << std::endl;
99
101
if (client_socket->getStage () == GET_REQUEST)
100
102
{
101
103
if (client_socket->getRequest () == 0 )
@@ -117,20 +119,23 @@ void Server::keventProcess()
117
119
std::cout << " request error" << std::endl;
118
120
continue ;
119
121
}
120
- client_socket->setResourceFd ();
121
122
client_socket->setStage (SET_RESOURCE);
123
+ client_socket->setResourceFd ();
122
124
int read_fd = client_socket->getResource ()->getReadFd ();
123
125
int write_fd = client_socket->getResource ()->getWriteFd ();
124
- if (read_fd != -1 )
125
- {
126
- _kq.addEvent (EVFILT_READ, read_fd, NULL );
127
- _socket[read_fd] = client_socket;
128
- }
129
- if (write_fd != -1 )
130
- {
131
- _kq.addEvent (EVFILT_WRITE, write_fd, NULL );
132
- _socket[write_fd] = client_socket;
133
- }
126
+ if (client_socket->getStage () == SET_RESOURCE)
127
+ {
128
+ if (read_fd != -1 )
129
+ {
130
+ _kq.addEvent (EVFILT_READ, read_fd, NULL );
131
+ _socket[read_fd] = client_socket;
132
+ }
133
+ if (write_fd != -1 )
134
+ {
135
+ _kq.addEvent (EVFILT_WRITE, write_fd, NULL );
136
+ _socket[write_fd] = client_socket;
137
+ }
138
+ }
134
139
}
135
140
else if (client_socket->getStage () == SET_RESOURCE)
136
141
{
@@ -139,12 +144,13 @@ void Server::keventProcess()
139
144
memset (buffer, 0 , BUFFERSIZE);
140
145
if (client_socket->getResource ()->getPid () > 0 )
141
146
{ // cgi
147
+ std::cout << " pid check ====== " << std::endl;
142
148
ret = waitpid (client_socket->getResource ()->getPid (), &stat, WNOHANG);
143
149
if (ret < 0 )
144
150
{
145
151
std::cout << " process error!!!" << std::endl;
146
152
_kq.removeEvent (EV_DELETE, client_socket->getResource ()->getReadFd (), NULL );
147
- _socket.erase (client_socket->getResource ()->getReadFd ());
153
+ // _socket.erase(client_socket->getResource()->getReadFd());
148
154
close (client_socket->getResource ()->getReadFd ());
149
155
continue ;
150
156
// process error
@@ -159,7 +165,7 @@ void Server::keventProcess()
159
165
// cgi error
160
166
std::cout << " cgi error!!!" << std::endl;
161
167
_kq.removeEvent (EV_DELETE, client_socket->getResource ()->getReadFd (), NULL );
162
- _socket.erase (client_socket->getResource ()->getReadFd ());
168
+ // _socket.erase(client_socket->getResource()->getReadFd());
163
169
close (client_socket->getResource ()->getReadFd ());
164
170
continue ;
165
171
}
@@ -178,8 +184,8 @@ void Server::keventProcess()
178
184
{
179
185
client_socket->setStage (MAKE_RESPONSE);
180
186
client_socket->getResponse ()->makeResponse ();
181
- _kq.removeEvent (EV_DELETE, client_socket->getResource ()->getReadFd (), NULL );
182
- _socket.erase (client_socket->getResource ()->getReadFd ());
187
+ // _kq.removeEvent(EV_DELETE, client_socket->getResource()->getReadFd(), NULL);
188
+ // _socket.erase(client_socket->getResource()->getReadFd());
183
189
close (client_socket->getResource ()->getReadFd ());
184
190
}
185
191
}
@@ -200,7 +206,7 @@ void Server::keventProcess()
200
206
client_socket->setStage (MAKE_RESPONSE);
201
207
client_socket->getResponse ()->makeResponse ();
202
208
_kq.removeEvent (EV_DELETE, _kq._event_list [i].ident , NULL );
203
- _socket.erase (_kq._event_list [i].ident );
209
+ // _socket.erase(_kq._event_list[i].ident);
204
210
close (_kq._event_list [i].ident );
205
211
}
206
212
}
@@ -214,25 +220,30 @@ void Server::keventProcess()
214
220
{
215
221
case CLIENT_SOCKET:
216
222
{
217
- ClientSocket *client_socket = dynamic_cast <ClientSocket *>(_socket[_kq._event_list [i].ident ]);
223
+ ClientSocket *client_socket = reinterpret_cast <ClientSocket *>(_socket[_kq._event_list [i].ident ]);
218
224
// response 보내주는거
219
- if (client_socket != 0 && client_socket->getRequest () != 0 && client_socket->getStage () == MAKE_RESPONSE) // + 리소스도 다 읽었으면
225
+ if (client_socket != 0 && client_socket->getRequest () != 0 && ( client_socket->getStage () == MAKE_RESPONSE || client_socket-> getStage () == MAKE_AUTOINDEX) ) // + 리소스도 다 읽었으면
220
226
{
221
227
std::cout << " EVFILT_WRITE - fd[" << _kq._event_list [i].ident << " ]: " << client_socket << std::endl;
222
228
client_socket->sendResponse ();
223
- _socket.erase (_kq._event_list [i].ident );
229
+ // _socket.erase(_kq._event_list[i].ident);
224
230
close (_kq._event_list [i].ident );
225
231
}
226
232
else if (client_socket->getStage () == SET_RESOURCE)
227
233
{
228
234
// cgi & POST
229
235
// POST 요청 다 받아오면 파일(resource write_fd)에 request body를 한번에 쓰기
230
236
int n;
237
+ if (flag == 0 )
238
+ {
239
+ std::cout << " write_fd = " << client_socket->getResource ()->getWriteFd () << " content" << client_socket->getResource ()->getContent ().c_str () << std::endl;
240
+ flag = 1 ;
241
+ }
231
242
n = write (client_socket->getResource ()->getWriteFd (), client_socket->getResource ()->getContent ().c_str (), client_socket->getResource ()->getContent ().size ());
232
243
if (n < 0 )
233
244
{
234
245
// error
235
- std::cout << " write error" << std::endl;
246
+ // std::cout << "write error" << std::endl;
236
247
continue ;
237
248
}
238
249
if (n < client_socket->getResource ()->getContent ().size ())
@@ -244,7 +255,7 @@ void Server::keventProcess()
244
255
client_socket->setStage (MAKE_RESPONSE);
245
256
client_socket->getResponse ()->makeResponse ();
246
257
_kq.removeEvent (EV_DELETE, client_socket->getResource ()->getWriteFd (), NULL );
247
- _socket.erase (client_socket->getResource ()->getWriteFd ());
258
+ // _socket.erase(client_socket->getResource()->getWriteFd());
248
259
close (client_socket->getResource ()->getWriteFd ());
249
260
// makeResponse()
250
261
} // resource write_fd (cgi pipe) 에 쓰기 <- 정확히 뭘쓰는지?? // entity를 보내줘야 한다
0 commit comments