aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tests/server/sws.c58
1 files changed, 38 insertions, 20 deletions
diff --git a/tests/server/sws.c b/tests/server/sws.c
index 1429b0d66..1ec63f2b0 100644
--- a/tests/server/sws.c
+++ b/tests/server/sws.c
@@ -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[])