From a613bee2764cf0bd2f84146d1a862513f02e426e Mon Sep 17 00:00:00 2001 From: Hans Leidekker Date: Tue, 16 Mar 2021 17:07:35 +0100 Subject: [PATCH] webservices: Implement WS_CHANNEL_PROPERTY_NO_DELAY. Signed-off-by: Hans Leidekker Signed-off-by: Alexandre Julliard --- dlls/webservices/channel.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/dlls/webservices/channel.c b/dlls/webservices/channel.c index f2906c86733..fd7c8d6029d 100644 --- a/dlls/webservices/channel.c +++ b/dlls/webservices/channel.c @@ -971,6 +971,7 @@ static HRESULT connect_channel_tcp( struct channel *channel ) { struct sockaddr_storage storage; struct sockaddr *addr = (struct sockaddr *)&storage; + BOOL nodelay = FALSE; int addr_len; WS_URL_SCHEME_TYPE scheme; WCHAR *host; @@ -1002,6 +1003,8 @@ static HRESULT connect_channel_tcp( struct channel *channel ) return HRESULT_FROM_WIN32( WSAGetLastError() ); } + prop_get( channel->prop, channel->prop_count, WS_CHANNEL_PROPERTY_NO_DELAY, &nodelay, sizeof(nodelay) ); + setsockopt( channel->u.tcp.socket, IPPROTO_TCP, TCP_NODELAY, (const char *)&nodelay, sizeof(nodelay) ); return S_OK; } @@ -2410,7 +2413,12 @@ HRESULT channel_accept_tcp( SOCKET socket, HANDLE wait, HANDLE cancel, WS_CHANNE return E_INVALIDARG; } - hr = sock_accept( socket, wait, cancel, &channel->u.tcp.socket ); + if ((hr = sock_accept( socket, wait, cancel, &channel->u.tcp.socket )) == S_OK) + { + BOOL nodelay = FALSE; + prop_get( channel->prop, channel->prop_count, WS_CHANNEL_PROPERTY_NO_DELAY, &nodelay, sizeof(nodelay) ); + setsockopt( channel->u.tcp.socket, IPPROTO_TCP, TCP_NODELAY, (const char *)&nodelay, sizeof(nodelay) ); + } LeaveCriticalSection( &channel->cs ); return hr;