[ovs-dev] [PATCH] stream-tcp: Call setsockopt TCP_NODELAY after TCP is connected for Windows.

Ben Pfaff blp at nicira.com
Tue Oct 7 21:25:05 UTC 2014


On Thu, Oct 02, 2014 at 08:16:56AM -0700, Gurucharan Shetty wrote:
> On Windows platform, TCP_NODELAY can only be set when TCP is established.
> The current code does not create any problems while running unit tests
> (because connections get established immediately) but is observed while
> connecting to a different machine.
> 
> commit 8b76839(Move setsockopt TCP_NODELAY to when TCP is connected.)
> made changes to call setsockopt with TCP_NODELAY after TCP is connected
> only in lib/stream-ssl.c. We need the same change for stream-tcp too.
> 
> Signed-off-by: Gurucharan Shetty <gshetty at nicira.com>

I guess we will need a similar change for stream-ssl.c.

I'm not a fan of unnecessary platform-related differences.  That makes
me think that it might be better to set TCP_NODELAY only after
connecting on every platform.  After all, there is no benefit, except
simplicity, to setting it before one can actually send any data, and
we cannot get the simplicity benefit anyway.

The one complication is that on Windows, stream-fd is only used for
TCP sockets, whereas on Unix it is used for Unix domain sockets and
TCP sockets, and one cannot set TCP_NODELAY on a non-TCP socket.  I
guess that means that we'd need a new parameter to new_fd_stream() to
indicate whether it is a TCP socket.  That's probably OK though.

Looking at a diff, the differences between the two versions of
stream-fd are not large, and some of the differences are unnecessary.
Maybe this change is an argument toward re-unification.



More information about the dev mailing list