sws.c: replace sleep() usage with wait_ms()

This commit is contained in:
Yang Tse 2012-01-09 22:49:28 +01:00
Родитель d28411c3cc
Коммит 123c92c904
1 изменённых файлов: 38 добавлений и 20 удалений

Просмотреть файл

@ -1083,18 +1083,21 @@ static int send_doc(curl_socket_t sock, struct httprequest *req)
else {
logmsg("Sent off %zd bytes", written);
}
if (req->writedelay) {
logmsg("Pausing %d seconds", req->writedelay);
sleep(req->writedelay);
}
/* write to file as well */
fwrite(buffer, 1, (size_t)written, dump);
if(got_exit_signal)
break;
count -= written;
buffer += written;
} while(count>0);
if(req->writedelay) {
int quarters = req->writedelay * 4;
logmsg("Pausing %d seconds", req->writedelay);
while((quarters > 0) && !got_exit_signal) {
quarters--;
wait_ms(250);
}
}
} while((count > 0) && !got_exit_signal);
do {
res = fclose(dump);
@ -1137,11 +1140,9 @@ static int send_doc(curl_socket_t sock, struct httprequest *req)
if(!strcmp("wait", command)) {
logmsg("Told to sleep for %d seconds", num);
quarters = num * 4;
while(quarters > 0) {
while((quarters > 0) && !got_exit_signal) {
quarters--;
res = wait_ms(250);
if(got_exit_signal)
break;
if(res) {
/* should not happen */
error = SOCKERRNO;
@ -1250,6 +1251,11 @@ static curl_socket_t connect_to(const char *ipaddr, unsigned short port)
}
#endif /* ENABLE_IPV6 */
if(got_exit_signal) {
sclose(serverfd);
return CURL_SOCKET_BAD;
}
if(rc) {
error = SOCKERRNO;
logmsg("Error connecting to server port %hu: (%d) %s",
@ -1278,10 +1284,10 @@ static curl_socket_t connect_to(const char *ipaddr, unsigned short port)
#define data_or_ctrl(x) ((x)?"DATA":"CTRL")
static int http_connect(curl_socket_t infd,
curl_socket_t rootfd,
struct httprequest *req,
const char *ipaddr)
static void http_connect(curl_socket_t infd,
curl_socket_t rootfd,
struct httprequest *req,
const char *ipaddr)
{
curl_socket_t serverfd[2];
curl_socket_t clientfd[2];
@ -1293,17 +1299,25 @@ static int http_connect(curl_socket_t infd,
bool poll_client[2] = { TRUE, TRUE };
bool poll_server[2] = { TRUE, TRUE };
int control=0;
int quarters;
int i;
sleep(1); /* sleep here to make sure the client gets the CONNECT response
first and separate from the data that might follow here */
/* sleep here to make sure the client gets the CONNECT response
first and separate from the data that might follow here */
quarters = 4;
while((quarters > 0) && !got_exit_signal) {
quarters--;
wait_ms(250);
}
if(got_exit_signal)
return;
clientfd[0] = infd;
clientfd[1] = CURL_SOCKET_BAD;
serverfd[0] = connect_to(ipaddr, req->connect_port);
if(CURL_SOCKET_BAD == serverfd[0])
return 1; /* failure */
return;
serverfd[1] = CURL_SOCKET_BAD; /* nothing there (yet) */
/* connected, now tunnel */
@ -1364,7 +1378,8 @@ static int http_connect(curl_socket_t infd,
struct httprequest req2;
datafd = accept(rootfd, NULL, NULL);
if(CURL_SOCKET_BAD == datafd)
return 4; /* error! */
return;
logmsg("====> Client connect DATA");
req2.pipelining = FALSE;
if(get_request(datafd, &req2))
@ -1482,7 +1497,11 @@ static int http_connect(curl_socket_t infd,
if(clientfd[precontrol] != CURL_SOCKET_BAD)
shutdown(clientfd[precontrol], SHUT_RDWR);
sleep(1);
quarters = 4;
while((quarters > 0) && !got_exit_signal) {
quarters--;
wait_ms(250);
}
if(serverfd[precontrol] != CURL_SOCKET_BAD)
sclose(serverfd[precontrol]);
@ -1504,7 +1523,6 @@ static int http_connect(curl_socket_t infd,
sclose(clientfd[i]);
}
#endif
return 0;
}
int main(int argc, char *argv[])