mirror of
https://github.com/moparisthebest/curl
synced 2024-11-16 06:25:03 -05:00
parent
d49087f6bc
commit
03de4e4b21
@ -40,7 +40,8 @@ All
|
|||||||
.SH EXAMPLE
|
.SH EXAMPLE
|
||||||
TODO
|
TODO
|
||||||
.SH AVAILABILITY
|
.SH AVAILABILITY
|
||||||
Added in 7.49.0. This option is currently only supported on OS X El Capitan.
|
Added in 7.49.0. This option is currently only supported on Linux and OS X
|
||||||
|
El Capitan.
|
||||||
.SH RETURN VALUE
|
.SH RETURN VALUE
|
||||||
Returns CURLE_OK if fast open is supported by the operating system, otherwise
|
Returns CURLE_OK if fast open is supported by the operating system, otherwise
|
||||||
returns CURLE_NOT_BUILT_IN.
|
returns CURLE_NOT_BUILT_IN.
|
||||||
|
@ -668,7 +668,7 @@ void Curl_updateconninfo(struct connectdata *conn, curl_socket_t sockfd)
|
|||||||
/* there's no connection! */
|
/* there's no connection! */
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if(!conn->bits.reuse) {
|
if(!conn->bits.reuse && !conn->bits.tcp_fastopen) {
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
len = sizeof(struct Curl_sockaddr_storage);
|
len = sizeof(struct Curl_sockaddr_storage);
|
||||||
@ -776,7 +776,7 @@ CURLcode Curl_is_connected(struct connectdata *conn,
|
|||||||
trynextip(conn, sockindex, 1);
|
trynextip(conn, sockindex, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(rc == CURL_CSELECT_OUT) {
|
else if(rc == CURL_CSELECT_OUT || conn->bits.tcp_fastopen) {
|
||||||
if(verifyconnect(conn->tempsock[i], &error)) {
|
if(verifyconnect(conn->tempsock[i], &error)) {
|
||||||
/* we are connected with TCP, awesome! */
|
/* we are connected with TCP, awesome! */
|
||||||
|
|
||||||
@ -1109,6 +1109,8 @@ static CURLcode singleipconnect(struct connectdata *conn,
|
|||||||
rc = connectx(sockfd, &endpoints, SAE_ASSOCID_ANY,
|
rc = connectx(sockfd, &endpoints, SAE_ASSOCID_ANY,
|
||||||
CONNECT_RESUME_ON_READ_WRITE | CONNECT_DATA_IDEMPOTENT,
|
CONNECT_RESUME_ON_READ_WRITE | CONNECT_DATA_IDEMPOTENT,
|
||||||
NULL, 0, NULL, NULL);
|
NULL, 0, NULL, NULL);
|
||||||
|
#elif defined(MSG_FASTOPEN) /* Linux */
|
||||||
|
rc = 0; /* Do nothing */
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
15
lib/sendf.c
15
lib/sendf.c
@ -254,7 +254,17 @@ ssize_t Curl_send_plain(struct connectdata *conn, int num,
|
|||||||
const void *mem, size_t len, CURLcode *code)
|
const void *mem, size_t len, CURLcode *code)
|
||||||
{
|
{
|
||||||
curl_socket_t sockfd = conn->sock[num];
|
curl_socket_t sockfd = conn->sock[num];
|
||||||
ssize_t bytes_written = swrite(sockfd, mem, len);
|
ssize_t bytes_written;
|
||||||
|
|
||||||
|
#ifdef MSG_FASTOPEN /* Linux */
|
||||||
|
if(conn->bits.tcp_fastopen) {
|
||||||
|
bytes_written = sendto(sockfd, mem, len, MSG_FASTOPEN,
|
||||||
|
conn->ip_addr->ai_addr, conn->ip_addr->ai_addrlen);
|
||||||
|
conn->bits.tcp_fastopen = FALSE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
bytes_written = swrite(sockfd, mem, len);
|
||||||
|
|
||||||
*code = CURLE_OK;
|
*code = CURLE_OK;
|
||||||
if(-1 == bytes_written) {
|
if(-1 == bytes_written) {
|
||||||
@ -268,7 +278,8 @@ ssize_t Curl_send_plain(struct connectdata *conn, int num,
|
|||||||
/* errno may be EWOULDBLOCK or on some systems EAGAIN when it returned
|
/* errno may be EWOULDBLOCK or on some systems EAGAIN when it returned
|
||||||
due to its inability to send off data without blocking. We therefor
|
due to its inability to send off data without blocking. We therefor
|
||||||
treat both error codes the same here */
|
treat both error codes the same here */
|
||||||
(EWOULDBLOCK == err) || (EAGAIN == err) || (EINTR == err)
|
(EWOULDBLOCK == err) || (EAGAIN == err) || (EINTR == err) ||
|
||||||
|
(EINPROGRESS == err)
|
||||||
#endif
|
#endif
|
||||||
) {
|
) {
|
||||||
/* this is just a case of EWOULDBLOCK */
|
/* this is just a case of EWOULDBLOCK */
|
||||||
|
@ -2633,7 +2633,7 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option,
|
|||||||
data->set.tcp_keepintvl = va_arg(param, long);
|
data->set.tcp_keepintvl = va_arg(param, long);
|
||||||
break;
|
break;
|
||||||
case CURLOPT_TCP_FASTOPEN:
|
case CURLOPT_TCP_FASTOPEN:
|
||||||
#if defined(CONNECT_DATA_IDEMPOTENT)
|
#if defined(CONNECT_DATA_IDEMPOTENT) || defined(MSG_FASTOPEN)
|
||||||
data->set.tcp_fastopen = (0 != va_arg(param, long))?TRUE:FALSE;
|
data->set.tcp_fastopen = (0 != va_arg(param, long))?TRUE:FALSE;
|
||||||
#else
|
#else
|
||||||
result = CURLE_NOT_BUILT_IN;
|
result = CURLE_NOT_BUILT_IN;
|
||||||
|
Loading…
Reference in New Issue
Block a user