Skip to content

Commit edb2da8

Browse files
[Network] Add TCPKeepAlive option
TCPKeepAlive is implemented only for libsoup 3.x
1 parent b77f822 commit edb2da8

2 files changed

Lines changed: 12 additions & 5 deletions

File tree

Source/WebKit/NetworkProcess/soup/NetworkDataTaskSoup.cpp

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,6 @@ void NetworkDataTaskSoup::createRequest(ResourceRequest&& request, WasBlockingCo
223223
g_signal_connect(m_soupMessage.get(), "wrote-body-data", G_CALLBACK(wroteBodyDataCallback), this);
224224
#if USE(SOUP2)
225225
g_signal_connect(static_cast<NetworkSessionSoup&>(*m_session).soupSession(), "authenticate", G_CALLBACK(authenticateCallback), this);
226-
g_signal_connect(m_soupMessage.get(), "network-event", G_CALLBACK(networkEventCallback), this);
227226
#else
228227
g_signal_connect(m_soupMessage.get(), "authenticate", G_CALLBACK(authenticateCallback), this);
229228
g_signal_connect(m_soupMessage.get(), "accept-certificate", G_CALLBACK(acceptCertificateCallback), this);
@@ -235,6 +234,7 @@ void NetworkDataTaskSoup::createRequest(ResourceRequest&& request, WasBlockingCo
235234
g_signal_connect(m_soupMessage.get(), "request-certificate", G_CALLBACK(requestCertificateCallback), this);
236235
g_signal_connect(m_soupMessage.get(), "request-certificate-password", G_CALLBACK(requestCertificatePasswordCallback), this);
237236
#endif
237+
g_signal_connect(m_soupMessage.get(), "network-event", G_CALLBACK(networkEventCallback), this);
238238
g_signal_connect(m_soupMessage.get(), "restarted", G_CALLBACK(restartedCallback), this);
239239
g_signal_connect(m_soupMessage.get(), "starting", G_CALLBACK(startingCallback), this);
240240
if (m_shouldContentSniff == ContentSniffingPolicy::SniffContent)
@@ -1503,7 +1503,6 @@ void NetworkDataTaskSoup::didFail(const ResourceError& error)
15031503
dispatchDidCompleteWithError(error);
15041504
}
15051505

1506-
#if USE(SOUP2)
15071506
void NetworkDataTaskSoup::networkEventCallback(SoupMessage* soupMessage, GSocketClientEvent event, GIOStream* stream, NetworkDataTaskSoup* task)
15081507
{
15091508
if (task->state() == State::Canceling || task->state() == State::Completed || !task->m_client)
@@ -1515,6 +1514,16 @@ void NetworkDataTaskSoup::networkEventCallback(SoupMessage* soupMessage, GSocket
15151514

15161515
void NetworkDataTaskSoup::networkEvent(GSocketClientEvent event, GIOStream* stream)
15171516
{
1517+
#if !USE(SOUP2)
1518+
if (event == G_SOCKET_CLIENT_CONNECTED) {
1519+
const char* enableTCPkeepalive = getenv("WEBKIT_TCP_KEEPALIVE");
1520+
if (enableTCPkeepalive && enableTCPkeepalive[0] != '0') {
1521+
RELEASE_ASSERT(G_IS_SOCKET_CONNECTION(stream));
1522+
if (GSocket* socket = g_socket_connection_get_socket(G_SOCKET_CONNECTION(stream)))
1523+
g_socket_set_keepalive(socket, TRUE);
1524+
}
1525+
}
1526+
#else
15181527
auto time = MonotonicTime::now();
15191528
switch (event) {
15201529
case G_SOCKET_CLIENT_RESOLVING:
@@ -1556,8 +1565,8 @@ void NetworkDataTaskSoup::networkEvent(GSocketClientEvent event, GIOStream* stre
15561565
ASSERT_NOT_REACHED();
15571566
break;
15581567
}
1559-
}
15601568
#endif
1569+
}
15611570

15621571
void NetworkDataTaskSoup::startingCallback(SoupMessage* soupMessage, NetworkDataTaskSoup* task)
15631572
{

Source/WebKit/NetworkProcess/soup/NetworkDataTaskSoup.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -148,10 +148,8 @@ class NetworkDataTaskSoup final : public NetworkDataTask {
148148

149149
void didFail(const WebCore::ResourceError&);
150150

151-
#if USE(SOUP2)
152151
static void networkEventCallback(SoupMessage*, GSocketClientEvent, GIOStream*, NetworkDataTaskSoup*);
153152
void networkEvent(GSocketClientEvent, GIOStream*);
154-
#endif
155153

156154
#if SOUP_CHECK_VERSION(2, 49, 91)
157155
static void startingCallback(SoupMessage*, NetworkDataTaskSoup*);

0 commit comments

Comments
 (0)