35 fd_set infd, outfd, errfd;
38 tv.
tv_sec = timeout_ms / 1000;
39 tv.
tv_usec = (timeout_ms % 1000) * 1000;
45 FD_SET(sockfd, &errfd);
48 FD_SET(sockfd, &infd);
51 FD_SET(sockfd, &outfd);
55 res = select((
int)sockfd + 1, &infd, &outfd, &errfd, &tv);
64 const char *request =
"GET / HTTP/1.0\r\nHost: example.com\r\n\r\n";
65 size_t request_len = strlen(request);
67 size_t nsent_total = 0;
97 printf(
"Sending request.\n");
107 request_len - nsent_total, &nsent);
108 nsent_total += nsent;
111 printf(
"Error: timeout.\n");
124 }
while(nsent_total < request_len);
126 printf(
"Reading response.\n");
137 printf(
"Error: timeout.\n");
static int wait_on_socket(curl_socket_t sockfd, int for_recv, long timeout_ms)
CURL_EXTERN CURLcode curl_easy_send(CURL *curl, const void *buffer, size_t buflen, size_t *n)
CURL_EXTERN CURLcode curl_easy_recv(CURL *curl, void *buffer, size_t buflen, size_t *n)
#define curl_easy_setopt(handle, option, value)
#define curl_easy_getinfo(handle, info, arg)
CURL_EXTERN CURL * curl_easy_init(void)
CURL_EXTERN void curl_easy_cleanup(CURL *curl)
CURL_TYPEOF_CURL_OFF_T curl_off_t
CURL_EXTERN const char * curl_easy_strerror(CURLcode)
CURL_EXTERN CURLcode curl_easy_perform(CURL *curl)
#define CURL_FORMAT_CURL_OFF_T